PDO 不从 mysql 查询返回结果
Posted
技术标签:
【中文标题】PDO 不从 mysql 查询返回结果【英文标题】:PDO not returning results from mysql query 【发布时间】: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=
后面的空格,无法解析数据库名称。删除所有这些空格,这应该是有序的。
【参考方案1】:
尝试调整您的连接语句。我不确定订单是否会影响它,但从文档来看,它应该类似于:
mysql:host=localhost;port=3307;dbname=testdb
http://php.net/manual/en/ref.pdo-mysql.connection.php
谢谢,
安德鲁
【讨论】:
【参考方案2】:当你想执行一个查询时,首先通过设置它不等于或等于 false 来确保它会运行。这样你就可以调试你的脚本。尝试单独准备查询,而不是立即执行。
以下示例选择 'id' 为 1 或 3 的行。
<?php
// Connection data (server_address, database, name, poassword)
$hostdb = 'localhost';
$namedb = 'tests';
$userdb = 'username';
$passdb = 'password';
try
// Connect and create the PDO object
$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$conn->exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8
// Define and perform the SQL SELECT query
$sql = "SELECT * FROM `sites` WHERE `id` IN(1, 3)";
$result = $conn->query($sql);
// If the SQL query is succesfully performed ($result not false)
if($result !== false)
$cols = $result->columnCount(); // Number of returned columns
echo 'Number of returned columns: '. $cols. '<br />';
// Parse the result set
foreach($result as $row)
echo $row['id']. ' - '. $row['name']. ' - '. $row['category']. ' - '. $row['link']. '<br />';
$conn = null; // Disconnect
catch(PDOException $e)
echo $e->getMessage();
?>
【讨论】:
以上是关于PDO 不从 mysql 查询返回结果的主要内容,如果未能解决你的问题,请参考以下文章
PHP:PDO查询不返回结果,但在phpmyadmin中同样的查询返回4个结果?