Я очень новичок в подготовленных заявлениях mysqli, на самом деле это моя первая попытка. У меня есть этот блок кода, и я добавляю echos между каждой командой, и он отображает aaa и bbb, но не ccc, что я здесь делаю неправильно?
ошибок не возникает, просто пустой экран:
<?php $mysqli = new mysqli("localhost", "username", "password", "database"); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } if ($stmt = $mysqli->prepare("SELECT title FROM `in-the-press`")) { $stmt->execute(); echo 'aaa'; $stmt->bind_result($title); echo 'bbb'; $result = $stmt->get_result(); echo 'ccc'; while ($stmt->fetch()) { printf("%s %s\n", $title); } echo 'ddd'; $stmt->close(); } $mysqli->close(); ?>
ОБНОВЛЕНИЕ Я смог получить эту работу, выполнив следующие действия:
<?php $mysqli = new mysqli("localhost", "username", "password", "database"); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } if ($stmt = $mysqli->prepare("SELECT id, community, map, image FROM `googleMaps`")) { $stmt->execute(); $stmt->bind_result($id, $community, $map, $image); $stmt->fetch(); printf($id . ' ' . $community . ' ' . $map . ' ' . $image); $stmt->close(); } ?>
но это только дает мне 1 строку данных, как я могу получить все строки данных?
Чтобы использовать get_result()
вы должны использовать драйвер mysqlnd. Это включено по умолчанию в PHP 5.4 и более поздних версиях. Если вы используете более раннюю версию PHP, вам нужно выполнить некоторую установку, чтобы заставить mysqlnd работать. См. http://php.net/manual/en/mysqlnd.install.php
Если вы используете get_result()
, вам не нужно ничего связывать. Вы просто извлекаете каждую строку в виде массива и ссылаетесь на столбцы как на элементы этого массива:
if ($stmt = $mysqli->prepare("SELECT title, community, map, image FROM `googleMaps `")) { $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { printf("%s %s\n", $row["title"], $row["community"]); } $stmt->close(); }
Если вы не используете get_result()
, вы используете Mysqli по-старому, привязывая переменные к столбцам и вызывая fetch()
для заполнения переменных. Но вам нужно запустить цикл, пока fetch()
вернет NULL, когда результат будет завершен.
if ($stmt = $mysqli->prepare("SELECT title, community, map, image FROM `googleMaps`")) { $stmt->execute(); $stmt->bind_result($title, $community, $map, $image); while ($stmt->fetch()) { printf("%s %s\n", $title, $community); } $stmt->close(); }
Вам нужно распечатать результаты в цикле, например, вам нужно выполнить эхо для каждого найденного результата.