<?php # Nettuts Tutorial using PHP Data Objects (PDO),
/**This file contains the database access information
*This file also establishes a connection to mySQL
*and selects the database.
*Set the database access information as constants:
**/
// print_r(PDO::getAvailableDrivers());
DEFINE('DB_USER', 'root');
DEFINE('DB_PASSWORD', 'root');
DEFINE('DB_HOST', 'localhost');
DEFINE('DB_NAME', 'sitename');
$php = "htmlspecialchars";
try {
#MySQL with PDO_MYSQL
// $DBH = new PDO("mysql:host={$php(DB_HOST)}; dbname={$php(DB_NAME)}", root, root};
$DBH = new PDO("mysql:host=localhost; dbname= sitename", root, root);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
# UH-OH! Typed DELECT instead of SELECT!
$DBH->prepare('DELECT name FROM people');
} catch (PDOException $e) {
echo "I'm sorry, Dave. I'm afraid I can't do that.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
?>OS X中的控制台返回“14-8月-2011 15:59:59
-注意:使用未定义的常量根-假定的‘根’在/Applications/MAMP/htdocs3 3/nettuts/ PHP /pdo用于数据库访问/mysql_pdo_connect.php第20行。”
我搜索了一下,在这里找到了部分答案。所以我希望能在这里完成。
提亚
发布于 2011-08-14 23:10:33
你做了:
$DBH = new PDO("mysql:host=localhost; dbname= sitename", root, root); 这应该是:
$DBH = new PDO("mysql:host=localhost; dbname= sitename", 'root', 'root'); 加上引号。否则,PHP认为它是一些常量,而不是字符串。但是,通过查看您的代码,我看到您已经定义了constants来访问数据库,那么为什么不直接这样做呢:
$DBH = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME, DB_USER, DB_PASSWORD); 更新
我还看到您在PDO中使用MySQL。请注意,为了safely use MySQL with PDO,您必须使用disable emulated prepared statements
$DBH = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PASSWORD);
$DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);请注意,我还在DSN字符串中设置了编码(在我的例子中是utf8)。我还想知道您是否真的需要代码中的常量,因为通常每个请求只需要一个连接(到同一个数据库),所以如果只创建一次连接并将连接传递给需要连接的代码部分,就不需要让这些全局值在周围浮动。有关此问题的更多信息,请参见我的related question。
发布于 2011-08-14 23:12:44
在上面的代码中,您还没有定义一个名为root的常量。相反,您定义了一个名为DB_USER的常量,它的值为"root",而另一个名为DB_PASSWORD的值具有相同的值。有关这类常量如何工作的更多信息,请查看the PHP documentation page for define()。
试试这个:
$DBH = new PDO( "mysql:host=" . DB_HOST . "; dbname=" . DB_NAME,
DB_USER,
DB_PASSWORD
); 发布于 2011-08-14 23:10:48
您需要将'root' 字符串放在单引号中。
https://stackoverflow.com/questions/7060350
复制相似问题