У меня есть следующее простое приложение PHP MySQL, которое должно работать нормально. $ pk принимается отлично и является допустимым ARTICLE_NO, и запрос отлично работает при непосредственном выполнении mysql. Я поместил выходные операторы после каждого события и все, кроме tetsing, пока выполняется. Цикл while никогда не вводится, и я не уверен почему.
edit: я сузил проблему до того факта, что возвращается 0 строк, но я понятия не имею, почему тот же запрос в phpmyadmin дает правильный результат.
edit2: если я избавлюсь от цикла while и просто получу
if (!$getRecords->fetch()) {
printf("<p>ErrorNumber: %d\n", $getRecords->errno);
}
Это показывает, что errno равно 0. Таким образом, никакие записи не извлекаются, и нет ошибок, но это правильный запрос.
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
$pk = $_GET["pk"];
$con = mysqli_connect("localhost", "", "", "");
if (!$con) {
echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
exit;
}
$con->set_charset("utf8");
echo "test outside loop";
if(1 < 2) {
echo "test inside loop";
$query1 = 'SELECT ARTICLE_NO FROM AUCTIONS WHERE ARTICLE_NO = ?';
if ($getRecords = $con->prepare($query1)) {
echo "inside second loop";
$getRecords->bind_param("i", $pk);
echo "test after bind param";
$getRecords->execute();
echo "test after bind execute";
$getRecords->bind_result($ARTICLE_NO);
echo "test after bind result";
while ($getRecords->fetch()) {
echo "test inside while";
echo "<h1>".$ARTICLE_NO."</h1>";
}
}
}
редактирование:
Я пробовал с этим кодом:
<?php
$mysqli = new mysqli("localhost", "", "", "");
$pk = $_GET["pk"];
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* prepare statement */
if ($stmt = $mysqli->prepare("SELECT ARTICLE_NAME, WATCH FROM AUCTIONS WHERE ARTICLE_NO = ? LIMIT 5")) {
$stmt->bind_param("i", $pk);
$stmt->execute();
/* bind variables to prepared statement */
$stmt->bind_result($col1, $col2);
/* fetch values */
while ($stmt->fetch()) {
printf("%s %s\n", $col1, $col2);
}
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
?>
Это работает без $ pk, если я уберу параметры, он работает нормально. Это не проблема получения pk через GET, потому что если я назначу $ pk = 1; вместо этого это все еще терпит неудачу. 1 является действительным ARTICLE_NO и ВЫБЕРИТЕ ARTICLE_NAME, СМОТРЕТЬ ОТ АУКЦИОНОВ, ГДЕ ARTICLE_NO = 1 LIMIT 5 отлично работает в phmyadmin.
edit: проблема заключалась в том, что mysqli не мог обрабатывать bigint, сейчас я использую k в качестве строки, и она отлично работает.