[やっと] PDO を学んでいて、この 1 時間、解決できないように見える問題に取り組んできました。私はこのコードを持っています:
//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 の無料アカウントにいます。このフォーラムの投稿とこの他の投稿から、ここの 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);
私が間違っていることがわかりますか?そうでない場合は、少なくともテストを続けるための方向性を教えてもらえますか? 私は主に(それだけではなく)このチュートリアルに従いました。どうもありがとう。