过去我会这样做:
$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?
谢谢!
答案 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);
?>