1

データベースへの挿入時にエラーが発生しました。

コード:

dbquery("INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ($article,'".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')");

dbquery を無視し、mysql_query とまったく同じように機能します。

私が受け取っているエラーは次のとおりです。

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''title','short','

このエラーがスローされる理由がわかりません!

4

4 に答える 4

2

編集
私は最初にあまりにも速く読んだ。エラーは列リストには表示されません。値リストに表示されているようです。クエリで構文エラーが発生する可能性があるのは、$articleが空の場合(または数値以外のデータなどのサニタイズされていないデータ)のみです。クエリで引用符を追加するか、少なくともデフォルト値があることを確認してください。

$article = (empty($article) || !is_numeric($article)) ? 0 : $article;
dbquery("... VALUES ('".$article."', '".clean($commentss['title'])."', '', '".mysql_real_escape_string($_POST['comment'])."', current_timestamp, '".USER_ID."', '0', '".$commentss['type']."', '')");

元の回答

MySQLで使用されるリストがありreserved words、列名に使用する場合は、バッククォートでエスケープする必要があります。

それらすべてを更新して修正してみてください。

dbquery("INSERT INTO site_news_comments (`articleid`, `title`, `short`, `comment`, `timestamp`, `userid`, `main`, `type`, `topstory`) VALUES ...
于 2012-10-04T03:22:22.670 に答える
2

男に釣り方を教える。

クエリが失敗した場合、最初にすべきことは、送信しようとしているクエリをエコーすることです。

$sql = "INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ($article,'".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')";

echo $sql;

通常、最終的なクエリの何が問題になっているのかは明らかです。クエリ内の動的なもの、および一般的にMySQLが不満を言う領域の周りに特に注意を払ってください。

それでも問題がないように見える場合は、予約語など、エスケープが必要な可能性のある単語を探します。

結論

コードmysqlを見て、問題はにあると結論付ける必要があり$article、それがクエリで問題を引き起こします。念のため、おそらくそれもエスケープする必要があります:)

おすすめ

PDO/mysqliとプリペアドステートメントの使用について学ぶ必要があります。

// PDO example
$stmt = $db->prepare('INSERT INTO site_news_comments (articleid, title, short, comment, timestamp, userid, main, type, topstory) VALUES (:article, :title, :short, :comment, CURRENT_TIMESTAMP, :user, :main, :type, :topstory)');
$stmt->execute(array(
    ':article' => $article,
    ':title' => $commentss['title'],
    ':short' => '',
    ':comment' => $_POST['comment'],
    ':user' => USER_ID,
    ':main' => 0,
    ':type' => $commentss['type'],
    ':topstory' => '',
));
于 2012-10-04T03:29:08.690 に答える
0
//change this line :
dbquery("INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ($article,'".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')");

//to this : (surround $articleid with single quote)
dbquery("INSERT INTO site_news_comments (articleid,title,short,comment,timestamp,userid,main,type,topstory) VALUES ('".$article."','".clean($commentss['title'])."','','".mysql_real_escape_string($_POST['comment'])."',current_timestamp,'".USER_ID."','0','".$commentss['type']."','')");
于 2012-10-04T03:59:05.860 に答える
0

助けてくれてありがとう!しかし、私は問題を解決しました!

問題の原因は「URL」にあったようです。URLは

ニュース/1/&page=2

$article を挿入すると、「1/」と表示されました。これは、URL のために ID が 1 ではなく 1/ であると見なされたためです。

だから私はちょうどそれをに変更しました

ニュース/1&ページ=2

ありがとう!

于 2012-10-04T03:41:10.307 に答える