如何检查准备好的陈述是否有结果

时间:2010-09-16 00:41:32

标签: php mysql pdo prepared-statement

过去我会这样做:

  $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']))) {

我准备好的语句的第二行if($ stmt ...是“如果此查询得到结果”或“是否”无论结果是否执行此查询,即它是否执行没有错误“。< / p>

我正在尝试解决的是准备好的语句你如何做相当于mysql_num_rows()== FALSE?

谢谢!

2 个答案:

答案 0 :(得分:7)

您可以使用rowCount()的{​​{1}}方法获取返回的行数:

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()

答案 1 :(得分:1)

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); 
?>