1

テーブルの列の 1 つに SQL コードを挿入する sql を記述しようとしています。このテーブルには、メール、確認コード、SQL の 3 つの列があります。

私はこのコードとそのバリエーションを試し、引用符をいじったり、バックスラッシュ/エスケープしたりします...しかし、何かがまだ間違っています:

INSERT INTO pre_registration(email, verification_code, sql) VALUES('myemail@gmail.com', '8efb100a295c0c690931222ff4467bb8', '"INSERT INTO customer(title) VALUES(\'Mr.\')"')

SQL 構文にエラーがあることがわかります。

 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 'sql) VALUES('myemail@gmail.com', '89f0fd5c927d466d6ec9a21b9ac34ffa', "INSER' at line 1

どうやってするの?PHP/MySQL を使用しています。

4

2 に答える 2

4

MySQLsqlはキーワードと見なします。あなたはそれを引用する必要があります:

INSERT INTO pre_registration(email, verification_code, `sql`) VALUES('myemail@gmail.com', '8efb100a295c0c690931222ff4467bb8', '"INSERT INTO customer(title) VALUES(\'Mr.\')"')

ちなみに、バックスラッシュを使用する代わりに、引用符を二重にしてエスケープします。これは、より SQL に適しています。

INSERT INTO pre_registration(email, verification_code, `sql`) VALUES('myemail@gmail.com', '8efb100a295c0c690931222ff4467bb8', '"INSERT INTO customer(title) VALUES(''Mr.'')"')
于 2012-12-17T14:12:11.390 に答える
1

正確な SQL エラーに関する洞察が役立ちます。一見したところ、テーブル名と開き括弧の間、および値と開き括弧の間にスペースを入れる必要があると思います。

また、確かではありませんが、SQL 部分の二重引用符を一重引用符で囲むと、エラーが発生する可能性があります。一重引用符の間にあるものはすべて文字どおりに解釈されるため、保存されたデータ内のエスケープ文字は実際にはスラッシュになります。

また、sql は予約語であり、引用符で囲む必要があります。

最後に、状況によっては、準備およびバインドされたパラメーターを使用した、より安全なデータ入力方法がある場合があります。

try
{
    $conn = new PDO ( "sqlsrv:server = $serverstringname; Database = $logindatabase", "$loginusername", "$loginpassword");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

catch ( PDOException $e )
{
    print( "Error connecting to SQL Server." );
    die(print_r($e));
}

$email = 'myemail@gmail.com' //or some other way of setting the variable like $_POST
$verification_code = '#####' //or $_Post method
$sql = 'Put Query Here' //probably have to declare this explicitly

$sql_insert = "INSERT INTO pre_registration_info (email, verification_code, 'sql') VALUES (?,?,?)";
        $stmt = $conn->prepare($sql_insert);
        $stmt->bindValue(1, $email);
        $stmt->bindValue(2, $verification_code);
        $stmt->bindValue(3, $sql);
        $stmt->execute();
于 2012-12-17T14:24:50.373 に答える