Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用MySQLi准备的语句检查现有记录_Php_Mysql_Mysqli - Fatal编程技术网

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
,这样即使已经有这样的条目也不会引发错误,然后检查插入的行数。