我[终于]在学习 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
。这意味着无法执行最后一个查询,但这并没有多大帮助,因为它可能是以前出现的问题。配置类返回正确的值。它以前与 mysql 一起工作,我对其进行了测试以查看它是否返回了正确的值(确实如此)。
我在 000webhost.com 免费帐户。从这个论坛帖子和其他帖子来看,这里的 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);
你能看出我做错了什么吗?如果没有,你至少能给我指出一些方向来继续测试它吗?我主要(但不仅)遵循本教程。非常感谢。