【发布时间】:2015-01-29 18:42:31
【问题描述】:
我很喜欢使用 mysqli 风格的 php 查询,但我正在尝试使用更多的 PDO。我想我知道如何使用它的大部分内容,但时不时会出现一些让我感到震惊的事情。
所以我正在对 mysql 数据库进行基本的 SELECT 查询,但我无法从查询中得到任何结果
PHP
try {
$dbhandle = new PDO("mysql:dbname = {$dbname}; host = {$dbhost}; port = {$dbport}", $dbuser, $dbpass);
} catch (PDOException $e)
{
echo "Error when creating Database Handle. Error: " .$e;
}
$sql = $dbhandle->prepare("SELECT projectName FROM `__projects`");
$sql->execute();
$projectList = $sql->fetch(PDO::FETCH_BOTH);
$size = sizeof($projectList);
echo $size;
我不明白为什么返回的数组是空的。我是不是搞错了。我知道用户/密码没问题,因为我可以在使用 mysqli 方法时使用相同的查询返回结果。
我做错了什么?
【问题讨论】:
-
为什么在表名两边加引号?你试过在phpAdmin或者其他数据库管理工具上查询吗?
-
@MarcoMura 这些至少是表名的正确引号。
-
@MarcoMura 将它们放在那里并没有错,它们对于非关键字名称是可选的。有些人喜欢根据喜好引用所有列。
-
DSN 字符串中不应包含空格。一个连续字符串:
mysql:dbname=database;host=hostname;port=3306 -
发生的事情是,由于 DSN 字符串中的空格,PDO 未能从 DSN 解析任何有用的内容并使用系统默认主机和端口,可能成功建立到 localhost 的连接,但是由于
dbname=后面的空格,无法解析数据库名称。删除所有这些空格,这应该是有序的。