嗨,谢谢你的阅读 .
我是php的新手(但我现在已经编程了很长时间)所以我决定使用pdo接口作为我的数据库查询的启动器 . 我确实放了一个小脚本来测试,但它返回数据库名称作为列名之一 . 为什么?
另外对于你的pdo专业版,一旦我在没有指定数据库名称的情况下实例化了一个新的pdo对象,我如何选择它以防止在我的查询中编写"databaseName.tableName" ...请参阅下面的我的脚本: ``
try
{
$dbh = new PDO('mysql:host=localhost', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e)
{
echo 'Erreur : ' . $e->getMessage() . ' ';
echo 'N° : ' . $e->getCode();
die();
}
$sth = $dbh->prepare("CREATE DATABASE IF NOT EXISTS myTest DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci");
$sth->execute();
$sth = $dbh->prepare("CREATE TABLE IF NOT EXISTS myTest.user(
personID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(personID),
FirstName varchar(15),
LastName varchar(15),
Age int(3)
)");
$sth->execute();
$sth = $dbh->prepare("INSERT INTO myTest.user (FirstName, LastName, Age) VALUES(?, ?, ?)");
$sth->execute(array("Charles", "Gagnon", "28"));
$sth = $dbh->query("SELECT * FROM myTest.user");
$result = $sth->fetch(PDO::FETCH_ASSOC);
$json = json_encode($result);
print_r($json);
?>
所以是的,print_r输出这个json:
{"personID":"1","FirstName":"Charles","user":"28"}
很奇怪,它输出表(用户)的名称而不是“年龄”,并且LastName字段根本不存在...
任何帮助将不胜感激,谢谢!
1 回答
无法复制这个 . 使用你的确切代码,我明白了
你确定myTest数据库和表用户不存在与你期望的不同的模式(但仍以某种方式仍然适用于INSERT语句)?
编辑:如果架构不同,则无法使用insert语句 .
只需重新设置PDO对象,在DSN中指定
dbname
参数即可 . 否则,我想您可以尝试执行use <database>;
命令 .