【解決方法】 SQL 構文にエラーがあります。 ..近くで使用する正しい構文については、mariadbサーバーのバージョンに対応するマニュアルを確認してください。

[ad_1]

PHPを使用してデータベースのテーブルを更新しようとしていますが、上記のmysqlエラーが発生します。

私が試したこと:

PHP
$conn = new mysqli(Host,Username,Password,Database);
    
    $que="UPDATE `spare_parts` SET 
 `item_name`='$item_name', `brand`='$brand',
`buy_p`='$buy_r',
`sale_p`='$sale_r',
`qty`='$qty'
 WHERE `id`='$id' LIMIT 1";
        
    if($conn->query($que))
    {
        $msg = 'alert("Record updated successfully");';
    }
        else
        {
             $msg= $conn->error;
    }

解決策 1

おそらく、それはデータです。 データのいずれかに引用符文字 (「Mary’s Beets」など) が含まれていると、入力が終了し、残りのデータが SQL 命令として使用されます。 文字列を連結して SQL コマンドを作成しないでください。 データベース全体を破壊する可能性のある、偶発的または意図的な SQL インジェクション攻撃にさらされる可能性があります。 代わりにパラメータ化されたクエリを使用してください。

文字列を連結すると、SQL が次のようなコマンドを受け取るため、問題が発生します。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'

ユーザーが追加した引用符は、SQL に関する限り文字列を終了させ、問題が発生します。 しかし、それはもっと悪いかもしれません。 代わりに「x’;DROP TABLE MyTable;–」と入力すると、SQL は非常に異なるコマンドを受け取ります。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'

どの SQL が 3 つの別個のコマンドとして認識されるか:

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';

完全に有効な SELECT

SQL
DROP TABLE MyTable;

完全に有効な「テーブルの削除」コマンド

SQL
--'

そして、それ以外はすべてコメントです。
一致する行を選択し、DB からテーブルを削除し、それ以外は無視します。

したがって、常にパラメーター化されたクエリを使用してください。 または、DB をバックアップから頻繁に復元する準備をしてください。 バックアップは定期的に取っていますよね?

ここを参照してください: PHP: プリペアド ステートメントとストアド プロシージャ – Manual[^]

解決策 4

#1064 – SQL 構文にエラーがあります。 near ‘ を使用する正しい構文については、MariaDB サーバーのバージョンに対応するマニュアルを確認してください。

[ad_2]

コメント

タイトルとURLをコピーしました