首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PDO调用中使用PHP常量

在PDO调用中使用PHP常量
EN

Stack Overflow用户
提问于 2011-08-14 23:07:52
回答 3查看 7.9K关注 0票数 9
代码语言:javascript
复制
<?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行。”

我搜索了一下,在这里找到了部分答案。所以我希望能在这里完成。

提亚

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-14 23:10:33

你做了:

代码语言:javascript
复制
$DBH = new PDO("mysql:host=localhost; dbname= sitename", root, root); 

这应该是:

代码语言:javascript
复制
$DBH = new PDO("mysql:host=localhost; dbname= sitename", 'root', 'root'); 

加上引号。否则,PHP认为它是一些常量,而不是字符串。但是,通过查看您的代码,我看到您已经定义了constants来访问数据库,那么为什么不直接这样做呢:

代码语言:javascript
复制
$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

代码语言:javascript
复制
$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

票数 21
EN

Stack Overflow用户

发布于 2011-08-14 23:12:44

在上面的代码中,您还没有定义一个名为root的常量。相反,您定义了一个名为DB_USER的常量,它的为"root",而另一个名为DB_PASSWORD的值具有相同的值。有关这类常量如何工作的更多信息,请查看the PHP documentation page for define()

试试这个:

代码语言:javascript
复制
$DBH = new PDO( "mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, 
                DB_USER, 
                DB_PASSWORD
              ); 
票数 4
EN

Stack Overflow用户

发布于 2011-08-14 23:10:48

您需要将'root' 字符串放在单引号中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7060350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档