【发布时间】:2012-11-14 14:35:50
【问题描述】:
我 [终于] 正在学习 PDO,过去一个小时我一直在处理一个我似乎无法解决的问题。我有这个代码:
//Simple script that connects to mysql and database.
$db = new PDO ("mysql:host=".Configuration::get('MysqlServername').";dbname=".Configuration::get('MysqlDatabase').";charset=UTF-8",
Configuration::get('MysqlUsername'),
Configuration::get('MysqlPassword')) or die ("Error connecting");
// To test why it doesn't work
$STH = $db->prepare("INSERT INTO htranslations (keyword, en, page, last) VALUES (?, ?, ?, NOW())") or die ("Error preparing");
$STH->bindValue(1, "New_test", PDO::PARAM_STR) or die ("Error binding 1");
$STH->bindValue(2, "New test", PDO::PARAM_STR) or die ("Error binding 2");
$STH->bindValue(3, $_SERVER['PHP_SELF'], PDO::PARAM_STR) or die ("Error binding 3");
$STH->execute() or die ("Error executing");
注意:or die 仅设置为临时措施,用于测试错误的来源。这段代码根本不起作用,我不知道为什么。现在,我已经尝试过:
在执行
var_dump($db);时,我在浏览器上得到object(PDO)#1 (0) { }。我想这不是它应该是的,但我不知道,在网上找不到太多。or die语句没有被执行让我觉得这可能是对的。显示的错误是
Error executing。这意味着无法执行最后一个查询,但这并没有太大帮助,因为它可能是以前出现的问题。Configuration 类正在返回正确的值。它以前与 mysql 一起工作,我对其进行了测试以查看它是否返回了正确的值(确实如此)。
我在 000webhost.com 免费帐户。从this forum post 和this other 来看,这里的 PDO 应该没有任何问题。此外,
print_r(PDO::getAvailableDrivers());返回 mysql、sqlite 和 sqlite2。反过来,在 execute() 语句中将值插入数组中也不起作用。
之前工作的 mysql_* 代码是(之前已转义):
$sql="INSERT INTO htranslations (keyword, en, page, last) VALUES ('$Id', '$Text', '".$_SERVER['PHP_SELF']."', now())";
mysql_query($sql);
你能看出我做错了什么吗?如果不是,您至少可以指出我继续测试它的方向吗?我主要(但不仅)关注this tutorial。非常感谢。
【问题讨论】:
-
你从
var_dump($STH->ErrorInfo())得到什么?您需要在执行后运行它,因此您需要暂时删除die()调用。 -
多亏了这个我解决了。显然,以前的 mysql 代码不能正常工作,但没有对其进行足够的测试(仅一次)。只需将“auto_increment”添加到 id 值即可,一切正常。它返回了 id 的重复键(加上一个错字)。
-
我愿意,但这不是答案。您应该发布自己的解决方案作为答案,并尽可能接受。
-
好的,不过对我来说这是一个有效的解决方案,因为我指定了
can you at least point me in some direction to keep testing it?