PHP + mySQL 在循环中插入多行到表时 myphp 挂起/卡住/

标签 php mysql sql xml

我在将循环中的行插入 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/

相关文章:

php - Paypal 快速结帐部分付款

php - 如何使用 jwt-auth 对 Facebook 用户进行身份验证?

php - 从数据库获取值并在下拉列表中显示所选值在 php 中不起作用

sql - Doctrine 2 - 单表继承 - 子实体的访问属性

php - 如何在laravel Controller 的URL请求中添加自定义变量?

php - WHILE 中的 IF 语句 - PHP、MySQL 和 HTML 下拉选择

sql - Oracle - 连接中的表别名和 NULL 计算

sql - 在大表查询中获取计数匹配非常慢

mysql - 我应该在哪里存储视频的好恶?

php - 从数据库中填充下拉列表的选项