Я работаю над этим простым запросом внутри двумерного массива, моя проблема в том, что он не работает, и ошибка говорит 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;
}
}
}
Ну, это что-то. Пара моментов: 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;
}
Других решений пока нет …