嗨,谢谢你的阅读。
我是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"}
非常奇怪,它输出表(用户)的名称而不是“Age”,并且LastName字段根本不存在...
任何帮助将不胜感激,谢谢!
答案 0 :(得分:1)
无法复制此内容。使用您的确切代码,我得到了
{"personID":"1","FirstName":"Charles","LastName":"Gagnon","Age":"28"}
您确定myTest
数据库和表user
是否已经存在,并且具有与您期望的不同的架构(但仍以某种方式仍然适用于INSERT
语句)?击>
编辑:如果架构不同,则无法使用insert语句。
另外对于你的pdo专业版,一旦我在没有指定数据库名称的情况下实例化了一个新的pdo对象,我该如何选择它以防止写入“databaseName.tableName”
只需重新启动PDO对象,在DSN中指定dbname
参数即可。否则,我想您可以尝试执行use <database>;
命令。