MariaDB错误,看似正确的事务SQL

时间:2017-01-25 13:14:37

标签: php mysql sql phpmyadmin mariadb

我遇到了特定SQL事务的问题,当我在phpMyAdmin中运行它时运行正常,但拒绝从我自己的php脚本运行。

    <?php

//connect
$link = mysqli_connect('localhost', 'root', '', 'chemDB');
if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}
mysqli_select_db($link, 'chemDB');
echo "Connected successfully\n";

//open import CSV
$file = fopen('cas_list.csv', 'r');

//convert decimal comma to float
function commaToPoint($val)
{
  $val = str_replace(',', '.', $val);
  return floatval($val);
}

//cycle through csv lines
while (! feof($file))
{
  $data = fgetcsv($file, '', ';');

  $un     = strval($data[0]);
  $cas    = strval($data[1]);
  $name   = strval($data[2]);
  $m_mass = commaToPoint($data[3]);
  $m_n    = commaToPoint($data[4]);
  $m_s    = commaToPoint($data[5]);
  $m_cl   = commaToPoint($data[6]);
  $m_f    = commaToPoint($data[7]);
  $m_br   = commaToPoint($data[8]);
  $m_other= commaToPoint($data[9]);

  $query = "BEGIN;
    INSERT INTO chemical (cas, name) VALUES ('$cas', '$name');
    SELECT LAST_INSERT_ID() INTO @chemical_id;
    --followed by more SQL...
  COMMIT;";

  print_r($query);


  $result = mysqli_query($link, $query);
  if (!$result)
  {
    echo("\nError description: " . mysqli_error($link)."\n\n");
  }
}

fclose($file);
mysqli_close($link);

?>

在这种情况下,有问题的表`chemical`有3个字段:id(int 11),cas(varchar24)和name(varchar255)。

CSV中的一条输入行是: 0072;121-82-4;Cyclotrimethyleentrinitramine, bevochtigd;222,3;6;;;;;138,24;

print_r($query)打印出生成的查询字符串,该字符串在phpMyAdmin中正常工作,但不能与mysqli_query()一起工作:

  

BEGIN;

     

插入“化学品”   (`cas`,`name`)   VALUES   (&#39; 121-82-4&#39;,&#39; Cyclotrimethyleentrinitramine,bevochtigd&#39;);

     

SELECT LAST_INSERT_ID()INTO @chemical_id;

     

- 接着是更多SQL ......

     

COMMIT;

然而,无论我使用何种格式,我最终都会遇到错误:

  

您的SQL语法有错误;查看与您的MariaDB服务器版本对应的手册,以便在&B39IN附近使用正确的语法;    插入“化学品”    (`cas`,`name`)    VALUES    (&#39; 121-82-4&#39;,&#39; Cyclotrimet&#39;在第2行。

1 个答案:

答案 0 :(得分:0)

mysqli_multi_query()解决了这个问题,谢谢。关于sql注入问题:这个脚本是私有运行的,用于向数据库添加数据,之后不能公开访问和删除。