MySqli цикл с сохраненными результатами - PullRequest
1 голос
/ 19 октября 2011

Я посмотрел на подготовленные операторы в MySqli, и все работало нормально с точки зрения фильтрации (personID должен быть числовым).Но когда я использую store_result (для зацикливания записей), фильтрация останавливается.Например:

$personID = 4;
if ($stmt = $mysqli->prepare("SELECT personName FROM people WHERE personID>?")) {
$stmt->bind_param("s",$personID);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($personName);

//$stmt->fetch();
//$stmt->fetch_row();
  while($stmt->fetch()){
      echo $personName."<br /><br />";
  }
  $stmt->close();
}

Это отлично работает, но если я установлю:

$personID = 'bbccc';

Возвращает все записи, то есть останавливает проверку типа и возвращает все записи.Итак, как мне поддерживать фильтрацию?

Спасибо

1 Ответ

0 голосов
/ 19 октября 2011

Вероятно, это связано с тем, что MySQL преобразует строку bbccc в целое число, результат которого равен 0. Затем вы фактически выбираете все записи, где personId > 0, что, вероятно, все или все, кроме одной из ваших строк .

Если $personID является целочисленным значением, вы должны связать его как таковое, а не как строку:

$stmt->bind_param("i", $personID);

Чтобы увидеть это поведение в действии, выполните следующий запрос:

mysql> SELECT CAST('bbbcc' AS UNSIGNED);
+---------------------------+
| CAST('bbbcc' AS UNSIGNED) |
+---------------------------+
|                         0 | 
+---------------------------+
1 row in set, 1 warning (0.00 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...