1
$id = $_REQUEST["Uid"];

$query = "update prd set name='".$_POST['nm']."', char='".$_POST['ch']."', price='".$_POST['pr']."', sp_pri='".$_POST['spr']."', is_eli='".$_POST['enb']."', upd='".$_POST['ud']."', img='".$_FILES['img']['name']."', c_id='".$_POST['cid']."' where id=".$id;

$r = mysql_query($query) or die(mysql_error());
if ($r == 1)
    echo "Record Updated";

このクエリから次のエラーが表示されますが、解決方法がわかりません。SQL は問題ないように見えます。私は何を間違っていますか?

SQL 構文にエラーがあります。near 'char='b', price='150', sp_pri='100', is_eli='Yes', upd='Mon Jul 23 2012 17 使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 :23:24' 1行目

4

2 に答える 2

8

charは SQL 内の予約語です。このようなキーワードを列名として使用する場合は、それらをバッククォートで囲む必要があります (列名で常に行う必要があります)。

$query="update prd set `name`='".$_POST['nm']."', `char`='".$_POST['ch']."', `price`='".$_POST['pr']."', `sp_pri`='".$_POST['spr']."', `is_eli`='".$_POST['enb']."', `upd`='".$_POST['ud']."', `img`='".$_FILES['img']['name']."', `c_id`='".$_POST['cid']."' where `id`=".$id;

さらに、$_POST事前にサニタイズせずに変数をクエリに直接追加すると、データや Web サイトを危険にさらすあらゆる種類の攻撃に対してシステムが開かれます。

このような問題を回避するには、mysqliPDOを参照してください。

于 2012-07-25T08:27:01.507 に答える
1

Sirkoの提案に加えて、日付である割り当て先フィールドでは、 STR_TO_DATEupdを使用する必要があります

于 2012-07-25T08:32:13.607 に答える