1

我有以下 PHP 脚本:

$i = 0;
        while ($i < 30){
            $insertquery = "INSERT INTO {$savename} VALUES (";

            foreach ($valuearray as $column){
                $insertquery .= $column[$i] . ",";
            }

            $insertquery .= ");";
            echo $insertquery;
            $queryResult = mysqli_query($con, $insertquery);
            if ($queryResult === TRUE){

            }else{
                print "<br /><br />No Row created. Check " . mysqli_error($con);
            }
            $i++;
        }

$valuearray 是一个二维数组,其中包含需要插入到表中的所有内容。问题是上面的代码在表单中创建了一个 MySQL 语句

INSERT INTO rates_test VALUES (1000,0.1,2.3,100,2,3,); 

这给出了一个语法错误,因为最后一个值,后面有一个。

我该如何更改脚本,以便最后一个值,后面没有,或者在 foreach 循环之后删除它?

4

3 回答 3

4

$insertquery .= ");";你可以使用之前$insertquery = rtrim($insertquery, ',');

我构建列表的首选方法IN是使用implode

"VALUES (" . implode(',', $valuearray) . ")";

还值得注意的是,您最好使用参数化查询。我不确定您是否可以使用 绑定可变数量的参数mysqli,但在 PDO 中,这个想法类似于:

"VALUES (" . implode(',', array_fill(0, count($valuearray), '?')) . ")";

这发出"VALUES (?,?,?)". 然后你可以传递$valuearrayexecute.

于 2013-09-05T17:44:14.173 回答
1

使用implode函数怎么样,这样你就不必担心最后一个逗号

$insertquery .= implode(",", $valuearray);

PS:如果数组来自用户输入,似乎代码容易发生SQL注入

于 2013-09-05T17:47:47.930 回答
0

如果可能的话,我宁愿不把它放在第一位,而不是添加你不想要的东西然后再删除它(我猜每个都是他们自己的):

foreach ($valuearray as $column)
  {
    $insertquery .= $column[$i];

    if ($i < 29)
      {
        $insertquery .= ",";
      }
  }
于 2013-09-05T17:47:10.713 回答