<?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);
}
?>
Run Code Online (Sandbox Code Playgroud)
OS X中的控制台返回"[14-Aug-2011 15:59:59] PHP注意:使用未定义的常量根 - 在/ Applications/MAMP/htdocs3/nettuts/PHP/PDO中假定为'root'用于数据库访问/ mysql_pdo_connect第20行的.php."
我已经"谷歌搜索"并在此处找到了部分答案.所以我希望在这里完成.
TIA
Pee*_*Haa 20
你做:
$DBH = new PDO("mysql:host=localhost; dbname= sitename", root, root);
Run Code Online (Sandbox Code Playgroud)
应该是:
$DBH = new PDO("mysql:host=localhost; dbname= sitename", 'root', 'root');
Run Code Online (Sandbox Code Playgroud)
有报价.否则PHP认为它是一些常量而不是字符串.但是通过查看您的代码,我发现您已经定义constants了访问数据库,那么为什么不简单地执行:
$DBH = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME, DB_USER, DB_PASSWORD);
Run Code Online (Sandbox Code Playgroud)
UPDATE
我也看到你在使用MySQL和PDO.请注意,为了安全地将MySQL与PDO一起使用,您必须禁用模拟的预准备语句:
$DBH = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PASSWORD);
$DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Run Code Online (Sandbox Code Playgroud)
请注意,我还在DSN字符串中设置了编码(在我的情况下为utf8).我也想知道你的代码中是否真的需要常量,因为通常每个请求只需要一个连接(到同一个数据库),因此如果只创建一次连接并通过,则不需要让这些全局变量浮动与需要它的代码部分的连接.有关此问题的更多信息,请参阅我的相关问题.
| 归档时间: |
|
| 查看次数: |
7065 次 |
| 最近记录: |