2017-10-29 8 views
0

こんにちは、英数字の値46e0d48d-bca1-11e7-991f-2c27d70ced1dを表のvarchar型の列に挿入しようとしています。変数を挿入していますが、構文が正しくない1604エラーが発生します。ここで私は英数字の値46e0d48d-bca1-11e7-991f-2c27d70ced1dを渡していますuser列のコード英数字の値をvarchar型の列に挿入する

SET @sql = CONCAT('insert into ', @user_table_name, ' 
        (user, user2, message, mesg_type, date_time, mesg_read_status) 
        values (',@user_id,',',@user2_id,',',@message,',',@mesg_type,',',@date_time,',',@read_status,')' 
        ); 
select @sql;  
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

です。

答えて

0

は、パラメータを使用することを学ぶ:

SET @sql = CONCAT(' 
insert into ', @user_table_name, ' (user, user2, message, mesg_type, date_time, mesg_read_status) 
    values (?, ?, ?, ?, ?, ?) 
        '); 

PREPARE stmt FROM @sql; 
EXECUTE stmt USING @user_id, @user2_id, @message, @mesg_type, @date_time, @read_status; 

DEALLOCATE PREPARE stmt; 

は、パラメータ値を持つクエリ文字列をのmungeしないでください。これにより、コードのデバッグが難しくなり、エラーが発生しやすくなり、読みにくくなり、SQLインジェクションの別の攻撃ラインが開きます。

+0

それを試してみましたが、それはユーザーフィールドがヌル値 –

+0

@ pramodaravindを持つことができないというエラーを出しました。 。 。次に、 '@ user_id'に' NULL'値がないことを確認してください。 –

+0

ありがとうございました –

0
SET @sql = CONCAT('insert into ', @user_table_name, ' 
       (user, user2, message, mesg_type, date_time, mesg_read_status) 
       values (\'',@user_id,'\',',@user2_id,',',@message,',',@mesg_type,',',@date_time,',',@read_status,')' 
       ); 
select @sql;  
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

このステートメントは機能するはずです。試してみてください

+0

また、挿入する値に対応するために列の長さが十分に大きいことを確認してください。値が自動的に切り捨てられます。 – user990967

関連する問題