Задать вопрос

Как правильно написать подготавливаемый запрос?

Решил оптимизировать запросы.
Пытаюсь написать подготавлиемые запросы. Тут почему то не выходит.

Типы данных в таблице
id - int
time - int
ticker - char

//Получаем данные
$mysqli_request="SELECT `time`,`$column_value_from_base` FROM `$table_name` WHERE `time`>'$begin_time' AND `time`<'$end_time'  AND `ticker`='$ticker'";
$mysqli_result=$mysqli->query($mysqli_request) or die ($mysqli->error);
$mysqli->close;

//Выводим их в цикле
$num_rows = $mysqli_result->num_rows;
//Заполняем массив данных
for($num_rows; $num_rows>0; $num_rows--)
{
$row = $mysqli_result->fetch_assoc(); 
$time=$row['time'];
}
//и далее ещё код....


//Подготавливаемый запрос
$stmt = $mysqli->prepare("SELECT `time`,? FROM $table_name WHERE `time`>? AND `time`<? AND `ticker`=?");
$stmt->bind_param('siis',$column_value_from_base,$begin_time,$end_time,$ticker);
$stmt->execute();
$mysqli_result = $stmt->get_result();
$mysqli->close; //Принудительно закрываем соединение (оптимизация)
$stmt->close; //Принудительно закрываем запрос (оптимизация) 

//Выводим их в цикле
$num_rows = $mysqli_result->num_rows;
//Заполняем массив данных
for($num_rows; $num_rows>0; $num_rows--)
{
$row = $mysqli_result->fetch_assoc(); 
$time=$row['time'];
}
//и далее ещё код....


Результат подготавливаемого запроса ошибочный, пустой - вообщем что то не так.
К тому же, в запросе, мне не дали заменить $table_name на ? (возникает ошибка)

Как правильно написать подготавливаемый запрос?
И имеет ли он тут смысл? Предполагаемая выборка 1000 значений ($num_rows будет около 1000).
  • Вопрос задан
  • 211 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Плейсхолдерами можно подставлять только значения. Названия колонок, таблиц, баз данных не подставляются.
P.S. А вообще, смотрите errno/error после каждой функции.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DeyvHorni
@DeyvHorni
Примерно так
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$stmt = $dbh->prepare("SELECT * FROM table where `time` > ? AND `time` < ? AND ticker = ?");
if ($stmt->execute(array($minTime, $maxTime, $ticker))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}

php.net/manual/ru/book.pdo.php

а если нужно ограничить кол-во строк которые выводишь. Проще и правильнее лишние просто не доставать, а не считать сколько вывелось... offset limit
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы