我在将循环中的行插入 mySQL 表时遇到一些奇怪的问题。 让我首先向您展示我使用的 php 代码,然后我描述一些统计数据。
我倾向于认为这是某些 mySQL 问题,但完全不知道是什么类型的问题。每分钟在表中的最大插入次数? (无法达到最大行数 - 磁盘上有大量空间)
<p></p>
<pre><code>echo " For character=" . $row[1];
$xml = simplexml_load_file($api_url);
$i=0;
foreach ($xml->result->rowset->row as $value) {
$newQuery = 'INSERT INTO '.$tableName.' (transactionDateTime, quantity, typeName, price, clientName, station, transactionType, seller) VALUES ("'.$value['transactionDateTime'].'",'.$value['quantity'].',"'.$value['typeName'].'","'.$value['price'].'","'.$value['clientName'].'","'.$value['stationName'].'","'.$value['transactionType'].'","'.$row[1].'")';
$i++;
if (!mysqli_query($conn, $newQuery)) {
die('Error while adding transaction record: ' . mysqli_error($conn));
} // if END
} // foreach END
echo " added records=" . $i;
</code></pre>
<p></p>
我在 XML 中有相同的数据,没有改变。 (XML 有大约 1400 多行我要插入的内容)
- 它总是插入不同数量的行。最大插入量在800+左右
- 如果我在 $i==400 的 foreach 循环中插入大约 10 秒的延迟,它将添加更少的行。更多的延迟 - 更少的行。
- 它永远不会到达
mysqli_error($conn)
的代码部分 - 它永远不会到达
echo "添加的记录= "。 $i;
代码的一部分。
由于它总是在不同的记录上停止,我必须假设 INSERT 查询没有任何问题。
因为它永远不会到达 foreach 循环之后的行 echo "添加记录= 。 $i;
我还假设 XML 数据最后没有被处理。
如果我使用其他数据源(另一个字符),其中 XML 中的记录较少,则此代码可以正常工作。
我的问题可能是什么?
最佳答案
可能是您在 SQL 服务器上触发了多个查询。最好通过 foreach 构建单个 SQL 查询,然后触发一次。
基本上是这样的:
$db = new mysqli($hostname, $username, $password, $database);
if($db->connect_errno > 0)
{
$error[] = "Couldn't establish connection to the database.";
}
$commaIncrement = 1;
$commaCount = count($result);
$SQL[] = "INSERT INTO $table $columns VALUES";
foreach ($result as $value)
{
$comma = $commaCount == $commaIncrement ? "" : ",";
$SQL[] = "(";
$SQL[] = "'$value[0]'"."'$value[1]'"."'$value[2]'"."'$value[3]'";
$SQL[] = ")$comma";
$commaIncrement++;
}
$SQL[] = ";";
$completedSQL = implode(' ',$SQL);
$query = $db->prepare($completedSQL);
if($query)
{
$db->query($completedSQL)
}
$db->close();
关于PHP + mySQL 在循环中插入多行到表时 myphp 挂起/卡住/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037469/