1

我正在尝试连接 sql 查询并在循环后稍后运行。这怎么可能?这是我的愿景:

for($i=1;$i<=10;$i++){
   $item_.$i = "value_".$i;
   sql = sql . " insert into table (`item`) values ('$item_'.$i.'')";
   // this should be but an array
}

并保存到数据库中:

for($j=0;$j<sqlarray.length;$j++){
   $sql_done = mysql_query($sqlarray[$j]);
}

我还没有尝试任何东西,因为数据库很大,我害怕用我的代码破坏一些重要的东西..

多谢

4

4 回答 4

4

使用 mysqli 和绑定

http://www.php.net/manual/en/mysqli.prepare.php

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
// define your query
$query = "INSERT INTO tablename (column1,column2) VALUES (:col1,:col2)";
if ($stmt = $mysqli->prepare($query)) {
  // loop of insert
  for($i=0;$i<10;$i++){
    $stmt->bind_param("col1", $i);
    $stmt->bind_param("col2", 'test'.$i);
    $stmt->execute();
  }
  $stmt->close();
}else{
  throw new Exception("unable to prepare query");
}
$mysqli->close();

绑定将避免很多安全问题,任何人都不应该使用其他东西然后绑定。

最好把所有东西都放在一个事务中,万一出现错误,你的数据库保持不变。

请参阅:http ://www.php.net/manual/en/mysqli.commit.php了解更多信息

这是一个带有提交或回滚的提案

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
if (mysqli_connect_errno()) {
  throw new Exception("Unable to connect");
}else{
  try{
    $mysqli->autocommit(FALSE);
    // define your query
    $query = "INSERT INTO tablename (column1,column2) VALUES (:col1,:col2)";
    if ($stmt = $mysqli->prepare($query)) {
      // loop of insert
      for($i=0;$i<10;$i++){
        $stmt->bind_param("col1", $i);
        $stmt->bind_param("col2", 'test'.$i);
        $stmt->execute();
      }
      $stmt->close();
    }else{
      throw new Exception("unable to prepare query");
    }
    $mysqli->commit();
  }catch(Exception $e){
    $mysqli->rollback();
  }
  $mysqli->close();
}

我没有尝试过,但我们应该接近一个好的(最佳实践?)解决方案。

我希望这可以帮助你。

于 2013-02-13T11:13:09.977 回答
1

对于插入查询,您可以编写如下代码:

$sql .= " insert into table (`item`) values ";
for($i=1;$i<=10;$i++){
   $item_.$i = "value_".$i;
   $sql = $sql . " ('$item_'.$i.''),";

}
mysqli_query( substr($sql ,0,-1) );

上面将所有插入数据连接到一个字符串中并立即执行。

于 2013-02-13T10:55:54.407 回答
0

我希望你在找这个

$query = "insert into table_name values";
for($i=0;$i<4;$i++) {
    $data1 = "test_".$i;
    $data2 = "new_".$i;
    $query .= "('','$data1','$data2'),";
}
$query = substr($query,0,-1);

echo $query;

让我知道

于 2013-02-13T10:57:47.900 回答
-1

试试下面的代码

 $sql="":
 for($i=1;$i<=10;$i++)
{
 $item_.$i = "value_".$i;
 $sql.=" insert into table (`item`) values ('$item_'.$i.'')";

  // this should be but an array
 }

 mysql_query($sql);
于 2013-02-13T10:50:08.983 回答