【发布时间】:2016-06-01 22:19:41
【问题描述】:
Ubuntu 14.04、MySQL 5.5、PHP5、PHP5-mysql - Ubuntu 14.04 发行版之外没有任何内容 - 这是错误和代码:
SQLSTATE[HY000] [2005] 未知的 MySQL 服务器主机 '(localhost)' (11)
<?php
$db_host='localhost';
$db_name='my_guitar_shop2';
$db_user='included';
$db_pass='included';
try {
$conn = new PDO("mysql:host=($db_host);dbname=($db_name)", $db_user, $db_pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $conn->query('SELECT * FROM products');
while($row = $query->fetch(PDO::FETCH_OBJ)) {
$results[] = $row;
}
print r($results);
} catch(PDOException $e) {
echo 'ERROR : ' . $e->getMessage();
}
?>
代码的 MySQLi 版本(未显示) - 从 MySQL 数据库返回数据。此 PHP-PDO 版本的代码返回错误。我已经替换了循环地址、我的 PC 的 IP 以及各种组合。到目前为止,只有 MySQLi 有效。我希望能够使用 PDO。脚本中有错误吗?有什么问题?
这个应用程序将我的 cmets 限制为 180 个字符,我不知道如何用更多代码做出回应,所以我正在编辑问题。对不起,我的无知。
这就是我最终得到的结果:
<?php
define("SQLHOST", "localhost");
define("SQLUSER", "included");
define("SQLPASS", "included");
define("SQLSGBD", "my_guitar_shop2");
$pdo = new PDO('mysql:host=' . SQLHOST . ';dbname=' . SQLSGBD . ';charset=UTF8', SQLUSER, SQLPASS);
if ($pdo) {
$stmt = $pdo->prepare("SELECT productName, description, listPrice FROM products");
if ($stmt) {
if($stmt->execute()); {
while( $row = $stmt->fetch()) {
echo "Item: " . $row['productName']."<br/>";
echo "Description: " . $row['description']."<br/>";
echo "List Price: " . $row['listPrice']."<br/>";
echo "<p> </p>";
}
}
}
}
?>
我最感兴趣的是让 PDO 工作,所以我去掉了错误检查。再次感谢您的回复。
【问题讨论】:
-
您需要在 PDO 声明中写
{$db_host},而不是($db_host)(与 db_name 相同)。 -
为什么还要在这种情况下使用变量呢?您不会在其他任何地方使用它们。只需使用
new PDO('mysql:host=localhost;dbname=my_guitar_shop2;charset=utf8', 'included', 'included')