首页 文章

为什么我的SELECT语句将数据库名称作为列名返回?! (pdo新手)

提问于
浏览
2

嗨,谢谢你的阅读 .

我是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 回答

  • 1

    无法复制这个 . 使用你的确切代码,我明白了

    {"personID":"1","FirstName":"Charles","LastName":"Gagnon","Age":"28"}
    

    你确定myTest数据库和表用户不存在与你期望的不同的模式(但仍以某种方式仍然适用于INSERT语句)?

    编辑:如果架构不同,则无法使用insert语句 .

    另外对于你的pdo专业版,一旦我在没有指定数据库名称的情况下实例化了一个新的pdo对象,我该如何选择它以防止写入“databaseName.tableName”

    只需重新设置PDO对象,在DSN中指定 dbname 参数即可 . 否则,我想您可以尝试执行 use <database>; 命令 .

相关问题