PHP中的SQL语句与phpmyadmin中的SQL语句的行为不同

时间:2014-09-12 20:18:02

标签: php mysql sql phpmyadmin

我有

$form_store_sql = "                                                                                                                    
     INSERT INTO myodyssey_myaccount (`id`, `email`, `username`, `password`) VALUES (NULL, 'email', 'unixmiah.formtest', 'woohoo');         

     SET @last_id_in_myaccount = LAST_INSERT_ID();                                                                                      

     INSERT INTO myodyssey_personal_info (`id`, `myodyssey_myaccount_id`) VALUES (NULL, @last_id_in_myaccount);                             

    SET @last_id_in_personal_info = LAST_INSERT_ID();                                                                                  

    INSERT INTO myodyssey_travel_info (`id`, `myodyssey_personal_info_id`)                                                                 
        VALUES (NULL, @last_id_in_personal_info);                                                                                                      

     SET @last_id_in_travel_info = LAST_INSERT_ID();                                                                                    

     INSERT INTO myodyssey_tour_orders (`id`, `myodyssey_travel_info_id`) VALUES (NULL, @last_id_in_travel_info);";

     if(mysql_query($form_store_sql)){
       echo "done";
     }

它不起作用;它不存储数据。但是如果我从form_store_variable中取出SQL语句并将其粘贴到phpmyadmin的sql对话框中,它的行为会有所不同,它会存储数据。我想知道我在form_store_variable中存储SQL语句的错误。

2 个答案:

答案 0 :(得分:4)

mysql_*()函数 NOT 允许在单个query调用中使用多个语句。它是对某些形式的SQL注入攻击的基本防御。

如果您在查询调用中使用了任何类型的错误处理,那么您已被告知语法错误:

$result = mysql_query($form_store_sql);
if ($result === false) {
   die(mysql_error());
}

您必须分别query()每个单独的陈述。

答案 1 :(得分:3)

mysql_query()在一次通话中不允许多次查询。您需要将$form_store_sql拆分为每个查询的单独字符串,并分别为每个查询调用mysql_query()

$sql = "INSERT INTO myodyssey_myaccount (`id`, `email`, `username`, `password`) 
        VALUES (NULL, 'email', 'unixmiah.formtest', 'woohoo');";
mysql_query($sql);
$sql = "SET @last_id_in_myaccount = LAST_INSERT_ID();";
mysql_query($sql);
...

你也可以通过在下一个插入中使用该函数来避免单独调用将变量设置为LAST_INSERT_ID()

$sql = "INSERT INTO myodyssey_personal_info (`id`, `myodyssey_myaccount_id`)
        VALUES (NULL, LAST_INSERT_ID());"
mysql_query($sql);