/* Подключение к серверу MySQL */
$mysqli = new mysqli(
HOST, /* Хост, к которому мы подключаемся */
ADMIN, /* Имя пользователя */
ADMINPASS, /* Используемый пароль */
DB_MAINNAME); /* База данных для запросов по умолчанию */
/* Проверка соединения */
if (mysqli_connect_errno()) {
printf("Подключение невозможно: %s\n", mysqli_connect_error());
exit();
}
$t='1,3,4';
$stmt = $mysqli->prepare("SELECT * FROM `news` WHERE `id` IN ( ? )");
$stmt->bind_param('s', $t);
/* выполнение подготовленного выражения */
$stmt->execute();
$stmt->store_result();
echo $stmt->num_rows;
/* Закрытие соединения и выражения*/
$stmt->close();
/* Закрыть подключение */
$mysqli->close();
die();
Не работает num_rows в подготовленныз запросах mysqli, если использовать IN
В результате исполнения скрипта всегда получаю 1. Что удивительно стоит заменит IN и сразу все работает.
Код:
Код:
SELECT * FROM `news` WHERE `id` IN ('1,3,4')
Разницу по сравнению с
Код:
SELECT * FROM `news` WHERE `id` IN (1,3,4)
улавливаешь? Теперь ошибку в коде видишь или явно показать?
Цитата: alekciy
Ни чего удивительно. Ты пытаешь послать такой запрос:
Разницу по сравнению с
улавливаешь? Теперь ошибку в коде видишь или явно показать?
Код:
SELECT * FROM `news` WHERE `id` IN ('1,3,4')
Разницу по сравнению с
Код:
SELECT * FROM `news` WHERE `id` IN (1,3,4)
улавливаешь? Теперь ошибку в коде видишь или явно показать?
Проблема в том что я не могу сделать так:
Код:
SELECT * FROM `news` WHERE `id` IN (?,?,?)
Т.е. для случая когда количество id неизветсно, я не могу сделать подготовленный запрос такого вида. Выход только:
SELECT * FROM `news` WHERE `id` IN (?)
где вместо "?" вставляется 1,2,...,n
Но в результате такого запроса получаю num_rows=1. Я не вижу другого выхода. Если ты видишь подскажи.
Код:
$mysqli = new mysqli(
HOST, /* Хост, к которому мы подключаемся */
ADMIN, /* Имя пользователя */
ADMINPASS, /* Используемый пароль */
DB_MAINNAME); /* База данных для запросов по умолчанию */
/* Проверка соединения */
if (mysqli_connect_errno()) {
printf("Подключение невозможно: %s\n", mysqli_connect_error());
exit();
}
$t='1,3,4';
$result = $mysqli->query("SELECT * FROM `news` WHERE `id` IN ({$t})");
while ($row = $result->fetch_assoc())
{
print_r( $row );
}
$mysqli->close();
HOST, /* Хост, к которому мы подключаемся */
ADMIN, /* Имя пользователя */
ADMINPASS, /* Используемый пароль */
DB_MAINNAME); /* База данных для запросов по умолчанию */
/* Проверка соединения */
if (mysqli_connect_errno()) {
printf("Подключение невозможно: %s\n", mysqli_connect_error());
exit();
}
$t='1,3,4';
$result = $mysqli->query("SELECT * FROM `news` WHERE `id` IN ({$t})");
while ($row = $result->fetch_assoc())
{
print_r( $row );
}
$mysqli->close();
Ну я так понимаю ты коснулся вообще необходимости подготовленых вопросов.