私が書いているプログラムと達成しようとしている機能
わかった。私が今書いているのは、AJAX を使った Javascript の非常に単純なフォーラムです。私のタスクの一部は、私の講師が PHP で私たちのために書いた API を使用して、新しい投稿を追加することです。API と SQL データベースは完全にローカルであることに注意してください。
この投稿を追加するために使用している関数は次のとおりです。
function addPosts()
{
// Add the new thread to the SQLlite database.
var treq = new Request({
url:'guestbook/control.php?action=insertPost',
'method':'post',
onSuccess: function() {
alert('win');
},
onFailure: function() {
alert('fail');
}
}).send(Object.toQueryString({
// Had to convert it to a query string because it wouldn't work as a normal object.
// These are the required values to send, to store a "post" in the database.
'name':'This is a name',
'comment':'This is a comment!'
}));
}
これにより、毎回同じデータが追加されることは承知しています。私はいまいましいことを機能させようとしているだけです!
問題
この関数が呼び出されると、SQL 構文エラーが発生します。それは私の講師のコードが間違っていることを意味するので、私は混乱しました。私の講師と話した後、彼は、投稿データが PHP コードに正しく送信されない場合に発生すると説明しました。そこで、Google Chrome の開発者ツールを使って何が起こっているのかを調べてみたところ、次のことがわかりました。
これは、データがリクエストに正常にロードされ、PHP ファイルに正常に渡されていることを意味します。明らかに私は間違っています。私はこれを機能させるために頭を悩ませてきました。
私のクラスの他の全員が問題を抱えていないため、API が正常に動作することを知っています。また、私が使用しているコードは、メモのコードから実際にはぼったくりなので、約 90% 確実ですに正しい。
注意すべきことの 1 つは、キーのコードがonSuccess
実行されることです。そのため、AJAX 側の問題ではないことがわかっています。
もう 1 つのことは、このコードが大学のコンピュータで機能していたことです。
スタックトレース
致命的なエラー: G:\Ajax Coursework\guestbook\php\database.php:134Stack trace:#0 G: でメッセージ「SQLSTATE[HY000]: General error: 1 near ")": syntax error」を含むキャッチされない例外 'PDOException': \Ajax Coursework\guestbook\php\database.php(134): PDO->prepare('INSERT INTO pos...')#1 G:\Ajax Coursework\guestbook\php\class.GuestBook.php(44): DatabaseHandler->insert(Array)#2 G:\Ajax Coursework\guestbook\control.php(8): GuestBook->insert(Array)#3 G:\Ajax Coursework\guestbook\control.php(56): insertPost( )#4 {main} が G:\Ajax Coursework\guestbook\php\database.php の 134 行目にスローされる