Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не работает num_rows в подготовленныз запросах mysqli, если использовать IN

9.9K
01 августа 2009 года
BelStudent
48 / / 18.03.2007
Не работате num_rows в подготовленныз запросах mysqli если использовать IN.
В результате исполнения скрипта всегда получаю 1. Что удивительно стоит заменит IN и сразу все работает.
Код:
/* Подключение к серверу 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();
12
01 августа 2009 года
alekciy
3.0K / / 13.12.2005
Ни чего удивительно. Ты пытаешь послать такой запрос:
 
Код:
SELECT * FROM `news` WHERE `id` IN ('1,3,4')

Разницу по сравнению с
 
Код:
SELECT * FROM `news` WHERE `id` IN (1,3,4)

улавливаешь? Теперь ошибку в коде видишь или явно показать?
9.9K
01 августа 2009 года
BelStudent
48 / / 18.03.2007
Цитата: 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. Я не вижу другого выхода. Если ты видишь подскажи.
12
02 августа 2009 года
alekciy
3.0K / / 13.12.2005
Я вообзе не вижу смысла использовать prepare. Зачем? Все гораздо прозаичнее:
Код:
$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();
9.9K
02 августа 2009 года
BelStudent
48 / / 18.03.2007
Ну вообще-то тот пример был как демо. И не нёс практического смысла.
Ну я так понимаю ты коснулся вообще необходимости подготовленых вопросов.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог