首页 > 解决方案 > 使用php在二维数组中插入查询

问题描述

我正在处理二维数组中的这个简单查询,我的问题是它不起作用,并且错误显示 Array to string conversion。我尝试使用 implode 但也没有用。希望你能帮助我。

Array( 
    [0] => Array ( 
        [0] => 04:56:27am 
        [1] => http://www.industrialknive.com/# 
        [2] => 200 
        [3] => 0 
    ) 
    [1] => Array ( 
        [0] => 04:56:28am 
        [1] => http://www.industrialknive.com/# 
        [2] => 200 
        [3] => 0 
    ) 
    [2] => Array ( 
        [0] => 04:56:30am 
        [1] => mailto:support@industrialknive.com 
        [2] => 301 
        [3] => 1 
    ) 
)

代码:

$last_id = $conn->insert_id;

for($i=0; $i < count($arrList); $i++){

    for($ii=0; $ii < count($arrList[$i]); $ii++){

        $sql = "INSERT INTO links (website, scanned_at, site_url, url_code, is_external ) VALUES ('$last_id', '$arrList[$i][$ii]', '$arrList[$i][$ii]', '$arrList[$i][$ii]', '$arrList[$i][$ii]')";

        if ($conn->query($sql) === FALSE) {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }

    }   

}

标签: phpmysqlmysqli

解决方案


嗯,就是这样。几点: 1) PHP 有一个foreach构造,所以你不需要使用老式的for循环。2)您通过使用字符串连接来构建查询,从而使自己对SQL 注入开放。3)您为每个数组的每个元素运行一次该查询。

自从我使用 mysqli 以来已经有一段时间了,但是这样的事情应该可以工作:

<?php
$last_id = $conn->insert_id;
$query = "INSERT INTO links (website, scanned_at, site_url, url_code, is_external ) VALUES (?, ?, ?, ?, ?)";
if ($stmt = $conn->prepare($query)) {
    foreach ($arrList as $arr) {
        $stmt->bind_param("isssi", $last_id, $arr[0], $arr[1], $arr[2], $arr[3]);
        if (!$stmt->execute()) {
            echo "Error executing: " . $sql . "<br>" . $stmt->error;
        }
    }
} else {
    echo "Error preparing: " . $sql . "<br>" . $conn->error;
}

推荐阅读