我想摆脱旧 mysql 扩展的束缚,我只是在数据库中的表上测试 PDO 连接和简单查询。我似乎能够连接,(“连接成功” echo )但这是好时光结束的地方。我现在花了太多时间尝试开始使用 PDO。
<?php
$host = 'localhost';
$port = '3306';
$username = 'user';
$password = 'blabla';
$database = 'workslist';
try {
$db = new PDO("mysql:host=$host; port = $port; dbname = $database", $username, $password);
echo 'connection successful<br />';
$query = 'SELECT * FROM main';
$statement = $db->prepare($query);
$statement->execute();
$results = $statement->fetchAll();
$statement->closeCursor();
foreach($results as $r){
echo $r['work'] . '<br />';
}
} catch (PDOException $e) {
echo 'Error!: ' . $e->getMessage() . '<br />';
die();
}
?>
上面的有什么问题吗?
数据库名称是“workslist”,表名称是“main”,“work”是该表中的列之一。我使用的 PHP 版本是 5.3.4,我在 win7 上使用 wamp。我运行了 phpinfo()
并在 PDO 标题下启用了 PDO 驱动程序 mysql、sqlite。为了确保数据库和表确实存在,我已经在 MySQL 上进行了尝试,并且可以使用旧的 mysql_fetch_array()
方法返回行。我检查了 php.ini 文件以确保“extension=php_pdo...”行都没有注释。
干杯
最佳答案
这应该有效。
请仔细检查您在该数据库中是否确实有一个名为“main”的表。
请注意,在您 execute()
查询之前,PDO 不会发现此错误,如果您的查询有问题,默认行为是返回一个空结果,不抛出异常。
要使 PDO 噪声更大,在构造 PDO 时添加 PDO::ERRMODE_EXCEPTION
选项:
$db = new PDO("mysql:host=$host;port=$port;dbname=$database", $username, $password,
array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)
);
现在检查您是否看到以下内容:
Error!: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'workslist.main' doesn't exist
https://stackoverflow.com/questions/8365584/