0

PHPから、準備済みステートメントを使用して(パラメーターをバインドすることにより)、データを以下のストアドプロシージャに送信しています

CREATE PROCEDURE test_my_add_comment(in var_details text, in var_table_name varchar(50))
BEGIN    
    SET @s = CONCAT('INSERT INTO ',var_table_name,'(details) VALUES("',var_details,'")');
    PREPARE stmt FROM @s;
    EXECUTE stmt;
   COMMIT;
END;

マイテーブル

CREATE TABLE `test_table` (
  `details` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

テキストに引用符が含まれていない場合はレコードが挿入されますが、テキストに引用符が含まれている場合はエラーがスローされます。

誰でもこれに対する解決策を提案できますか?

私の仮定は、準備されたステートメントがこのケースを処理する必要があるということでした。

4

2 に答える 2

1

バグは手順にあります。引用符をエスケープする方法は次のとおりです。ここでは一重引用符を使用します。また、テーブル/列名も引用します。

SET @s = CONCAT('INSERT INTO `',var_table_name,'` (`details`) VALUES(\'', QUOTE(var_details), '\')');
于 2013-04-25T09:53:08.943 に答える