php - MariaDB 错误与看似正确的事务 SQL

标签 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;环三甲基三硝胺,bevochtigd;222,3;6;;;;;138,24;

print_r($query) 打印出结果查询字符串,该字符串在 phpMyAdmin 中工作正常,但不适用于 mysqli_query():

BEGIN;

INSERT INTO `chemical` (`cas`, `name`) VALUES ('121-82-4', 'Cyclotrimethyleentrinitramine, bevochtigd');

SELECT LAST_INSERT_ID() INTO @chemical_id;

--followed by more SQL...

COMMIT;

但是,无论我使用什么格式,最终都会出现错误:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BEGIN; INSERT INTO `chemical` (`cas`, `name`) VALUES ('121-82-4', 'Cyclotrimet' at line 2`

最佳答案

mysqli_multi_query() 修复了问题,谢谢。对于 sql 注入(inject)问题:此脚本私下运行以将数据添加到数据库,不可公开访问并随后删除。

关于php - MariaDB 错误与看似正确的事务 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41852575/

相关文章:

php - innobackupex - 从命令行获取输出

sql - 在 SQL 中舍入平均值时如何检索小数

php - 什么场景需要在php中使用call_user_func()

php - 在每行返回的新 div 中显示 mysql 数据

php - 为什么聚合函数在我的 laravel SQL 查询中不起作用?

mysql - PHP MySQL SELECT 最新条目按 ID 分组并按时间戳排序

MYSQL select if exists (来自不同的表)

sql - 将数组传递到 SQL 以返回相同的数组大小并按顺序返回

phpfastcache V6 + redis - 可以设置前缀吗?

javascript - 从导航栏到同一页面内主要部分的链接(内部 php/html 文件)