0

Я уже давно задавал этот вопрос, но у вас было больше вопросов, а ответов - нет. Поэтому распишу поподробнее. Суть проблемы: Мне нужно создавать записи в БД путем парсинга страницы на phpMyAdmin - может проблема где-то там, не в этом суть, делаю я это таким образом:

$stmt = $link->prepare("INSERT INTO chat VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param('sssssssssss', $data, $frequency, $snr, $drift, $grid, $dbm, $w, $by, $loc, $km, $mi);

Далее, когда загружается сайт выводится ошибка:

Fatal error: Uncaught Error: Call to a member function bind_param() on boolean in D:\open_server_5_3_0_ultimate\OSPanel\domains\localhost\index.php:72 Stack trace: #0 {main} thrown in D:\open_server_5_3_0_ultimate\OSPanel\domains\localhost\index.php on line 72

И эта ошибка исчезает если оставить три или меньше любых переменных. Приведу весь мой безобразный код на обозрение - мол, скрывать мне нечего:

<?php
$code = file_get_contents('http://wsprnet.org/olddb?mode=html&band=all&limit=5&findcall=UB8SFY&findreporter=&sort=date');
preg_match_all('/<table(.*?)>(.*?)<\\/table>/is', $code, $table);
$table = $table[0][2];
preg_match_all('/<td.*?>&nbsp;(.*?)&nbsp;<\\/td>/is', $table, $finalT);
$finalT = $finalT[0];
echo "<pre>";
print_r($table);
echo "</pre>";
echo "<pre>";
print_r($finalT);
echo "</pre>";
$reg = '/<td.*?>&nbsp;(.*?)&nbsp;<\\/td>/is';
$str = $finalT[0];
preg_match($reg, $str, $finalTime);
$data = $finalTime[1];

$str = $finalT[1];
preg_match($reg, $str, $finalTime);
$call = $finalTime[1];

$str = $finalT[2];
preg_match($reg, $str, $finalTime);
$frequency = $finalTime[1];

$str = $finalT[3];
preg_match($reg, $str, $finalTime);
$snr = $finalTime[1];

$str = $finalT[4];
preg_match($reg, $str, $finalTime);
$drift = $finalTime[1];

$str = $finalT[5];
preg_match($reg, $str, $finalTime);
$grid = $finalTime[1];

$str = $finalT[6];
preg_match($reg, $str, $finalTime);
$dbm = $finalTime[1];

$str = $finalT[7];
preg_match($reg, $str, $finalTime);
$w = $finalTime[1];

$str = $finalT[8];
preg_match($reg, $str, $finalTime);
$by = $finalTime[1];

$str = $finalT[9];
preg_match($reg, $str, $finalTime);
$loc = $finalTime[1];

$str = $finalT[10];
preg_match($reg, $str, $finalTime);
$km = $finalTime[1];

$str = $finalT[11];
preg_match($reg, $str, $finalTime);
$mi = $finalTime[1];

echo($data . ', '); echo($call . ', '); echo($frequency . ', '); echo($snr . ', '); echo($drift . ', '); echo($grid) . ', '; echo($dbm . ', '); echo($w . ', '); echo($by . ', '); echo($loc . ', '); echo($km . ', '); echo($mi . ', ');

$link = mysqli_connect("127.0.0.1:3306", "mysql", "mysql", "table");
if (!$link) {
      die("Connection failed: " . mysqli_connect_error());
}

echo "Connected successfully";

$stmt = $link->prepare("INSERT INTO chat VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param('sssssssssss', $data, $frequency, $snr, $drift, $grid, $dbm, $w, $by, $loc, $km, $mi);
$stmt->execute();
$stmt->close();
$conn->close();
?>

Заранее спасибо.

  • Получить ошибку, прочесть, исправить – Ипатьев Jun 07 '19 at 15:43
  • @Ипатьев Вот ссылка на дубликат https://ru.stackoverflow.com/questions/423439/mysql-fetch-array-expects-parameter-1-to-be-resource-or-mysqli-result-boole – Anton Shchyrov Jun 07 '19 at 15:43
  • Во первых, я насчитал 11 параметров, Вы передаёте 12. Во вторых, исходя из ошибки, Вы используете процедурный стиль программирования, вместо ООП. Решение простое $link = new mysqli('localhost', 'my_user', 'my_password', 'my_db');. Или же, если желаете оставаться в процедурном стиле - то $query = mysqli_prepare($link, "своя строка запроса"); mysqli_stmt_bind_param($query, 'sssd', $data1, $data2...);, где sssd - тип значений (длина строки типов, должна соответствовать количеству параметров). Будьте внимательнее! – Владислав Jun 07 '19 at 16:14

0 Answers0