Как проверить, есть ли результаты с подготовленными заявлениями - PullRequest
2 голосов
/ 16 сентября 2010

В прошлом я делал бы что-то вроде этого:

  $sql = 'SELECT * FROM customers WHERE customer_email="' . mysql_real_escape_string($_POST['customer_email']) . '" ';
  $res = mysql_query($sql);

  // if there are no hits...
  if(mysql_num_rows($res) == FALSE) {

Сегодня я делаю то же самое, однако с подготовленными заявлениями:

  $stmt = $dbh->prepare("SELECT * FROM customers where customer_email = ? LIMIT 1");
  if ($stmt->execute(array($_POST['customer_email']))) {

2-я строка моего подготовленного заявленияif ($ stmt ... означает, что "если этот запрос получает результат" или это "если этот запрос выполняется независимо от результатов или нет, т.е. если он выполняется без ошибок".

Что я пытаюсьработать с подготовленными утверждениями, как вы делаете эквивалент mysql_num_rows () == FALSE?

Спасибо !!

Ответы [ 2 ]

7 голосов
/ 16 сентября 2010

Вы можете использовать rowCount() метод PDOStatement, чтобы получить количество возвращаемых строк:

$stmt = $dbh->prepare("SELECT * FROM customers where customer_email = ? LIMIT 1");
if ($stmt->execute(array($_POST['customer_email']))) {
    if($stmt->rowCount() > 0) {
       //fetch stuff...
    }
}  

Или, если rowCount() окажется ненадежным, вы можете сделать это:

$all = $stmt->fetchAll();
if(count($all)) {
   //loop through the set...
}
1 голос
/ 15 сентября 2011

PDOStatement::rowCount() возвращает количество строк, на которые влияет оператор DELETE, INSERT или UPDATE, а не количество строк, возвращаемых запросом select для запроса на выбор я использую:
fetchAll(PDO::FETCH_OBJ); А также echo count($lignes);

<?php
$PARAM_hote='localhost'; 
$PARAM_port='3306';
$PARAM_db='test'; 
$PARAM_user='root'; 
$PARAM_pwd=''; 
try
{
$connexion = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_db, $PARAM_user,$PARAM_pwd);
}
catch(Exception $e)
{
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
}
$requete_prepare_1=$connexion->prepare("SELECT * FROM `test_mysql`"); 
$requete_prepare_1->execute();
$lignes=$requete_prepare_1->fetchAll(PDO::FETCH_OBJ);
echo count($lignes); 
?>
...