Php 使用MySQLi准备的语句检查现有记录
因此,我编写了一个脚本,在表中插入一个电子邮件地址,但我想检查该地址是否已经存在。因此,我先准备一份声明:Php 使用MySQLi准备的语句检查现有记录,php,mysql,mysqli,Php,Mysql,Mysqli,因此,我编写了一个脚本,在表中插入一个电子邮件地址,但我想检查该地址是否已经存在。因此,我先准备一份声明: $statement = $db->prepare("SELECT * FROM `signups` WHERE `signups_email`= ? "); $statement->bind_param('s',$email); $statement->execute(); if($statement->num_rows < 1){ $stat
$statement = $db->prepare("SELECT * FROM `signups` WHERE `signups_email`= ? ");
$statement->bind_param('s',$email);
$statement->execute();
if($statement->num_rows < 1){
$statement->close(); //Free up the SQL result
//do the inserting code
} else {
echo "Email already exists";
}
$statement=$db->prepare(“从`signups`中选择*,其中`signups\u email`=?”;
$statement->bind_param('s',$email);
$statement->execute();
如果($statement->num_rows<1){
$statement->close();//释放SQL结果
//执行插入代码的操作
}否则{
回显“电子邮件已存在”;
}
问题是,($statement->num_rows<1)
似乎总是返回true,即使我知道数据库中有电子邮件。也就是说,它没有发现该地址已经存在于数据库中
我的连接etc正常,因为插入代码位正常。如果数据库中已经存在电子邮件,则您的语句将失败。
if()
应该是
if ($statement->num_rows == 0) {
... email does not exist, insert it
} else {
... at least one record with that email exists
}
请查看有关的文档 返回结果集中的行数。使用 mysqli_stmt_num_rows()取决于是否使用 mysqli_stmt_store_result(),用于在 语句句柄 如果使用mysqli_stmt_store_result(),则mysqli_stmt_num_rows()可能是 马上打电话来
看起来您需要先调用store_result(),然后才能检查行数。我看不出在这种情况下“等于零”与“小于一”有什么区别。@pilsetnieks我正要问完全相同的问题,如果您只需要检查那一列,您可以在该列上使用
UNIQUE
索引,并避免不必要的SELECT
查询。但当我尝试插入一个已经存在的条目时,这不会引发错误吗?我的方法使前端的错误处理变得非常简单。您可以执行INSERT IGNORE
,这样即使已经有这样的条目也不会引发错误,然后检查插入的行数。