PDO中的虚假陈述

Sho*_*hoe 1 php pdo

我正在尝试运行这个简单的查询:

try {
    $dsn = "mysql:host=localhost;dbname:mydb";
    $PDO = new PDO($dsn, 'root', '');
    $statement = $PDO->query("SELECT * FROM posts");
    var_dump($statement);  
} catch (PDOException $e) { exit($e->getMessage()); }
Run Code Online (Sandbox Code Playgroud)

而这个输出:

bool(false) 
Run Code Online (Sandbox Code Playgroud)

我真的生气了这个错误.我试图在我的数据库上运行查询.$PDO是一个PDO对象,因此从技术上讲它连接到数据库.似乎所有专业功能都没有出错.从$PDO->query()phpmyadmin 运行复制和粘贴的查询返回2记录的列表.我不知道该怎么做才能认真对待.我开始拉头发用头撞墙(这不是比喻).我究竟做错了什么?

Mad*_*iha 5

您有DSN问题.

dbname:mydb
Run Code Online (Sandbox Code Playgroud)

应该

dbname=mydb
Run Code Online (Sandbox Code Playgroud)

你不喜欢编程吗?


除了上述语句之外,您还应该在PDO属性中启用例外.通过在连接后立即添加以下语句来完成:

$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Run Code Online (Sandbox Code Playgroud)

更多要点

  • 命名约定 - 这是一个公认的命名约定,变量名称小写字母开头,每个连续的单词都在 Camel Case中,或者使用下划线.
    例如:$pdo,$databaseConnection $awesomeMultipleWordedVariable,$another_awesome_multiple_worded_variable.

  • +1为好抓!但是,OP无论如何都应该启用异常;). (2认同)