Prepared语句返回false,普通查询返回true

时间:2014-08-07 07:00:25

标签: php pdo

我要撕掉自己的头发,过去3个小时我一直在看这5行,我不能为了理智而发现它有什么问题。

连接正常:

$db = new PDO('mysql:host='.$config['database']['host'].';dbname='.$config['database']['name'],$config['database']['username'],$config['database']['password']);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

然后我运行这句话:

$product = $db->prepare('SELECT * FROM products JOIN suppliers ON products.supplier_id = suppliers.id WHERE products.partnumber=:partnumber');
$product -> execute( array( ':partnumber' => $_POST['partnumber'] ) );

$p = $product->fetchAll(PDO::FETCH_ASSOC);

如果我var_dump($p)它说bool(false)。但是如果我手动在我的数据库中运行语句,它会发现产品完全正常。

在前面提到的陈述之后,我运行这个命令:

$cu = current($db->query('SELECT currency_code FROM countries JOIN users ON users.country = countries.iso_alpha2 WHERE users.id="'.$_SESSION['userid'].'"')->fetch());

哪种方法完全正常,它会按照我告诉的那样返回货币。

所以,我的问题。为什么我准备好的陈述不起作用?

编辑:

我尝试运行$db->errorInfo,它返回NULL

1 个答案:

答案 0 :(得分:0)

  

所以,我的问题。为什么我准备好的陈述不起作用?

由于请求完全不同,没有必要比较它们。

如果execute返回false,则表示您在请求中出错。例如,您拼错了表名。

要调试您的查询,simplest way将使用var_dump($db->errorInfo());

由于XDebug,您还可以尝试逐步调试脚本。