我有这个变量来存储函数的结果:$var check=mailExists($email,$link)
。它应该是1或2,但它总是返回1 ... $email
是要在DB处检查的传递值,$link
是要使用的mysqli处理程序。我也在'rowsDEB'
处打印获取的结果,它总是显示0.这是我的功能:
function mailExists($email, $link){
$stmt = "";
$result = 1; //no such mail
$stmt = "SELECT email FROM users WHERE email = '$email'";
mysqli_query($link,$stmt);
mysqli_stmt_store_result($stmt);
mysqli_stmt_bind_result($stmt);
$rows = 0;
while(mysqli_stmt_fetch($stmt)){
$rows++;
}
$_SESSION['rowsDEB'] = $rows;
if(rows != 0) $result = 2; //mail exists in DB
mysqli_stmt_free_result($stmt);
mysqli_stmt_close($stmt);
discDB($link);
return $result;
}
答案 0 :(得分:1)
我假设你的$link
基本上是一个数据库连接变量。这是一个简单但有用的mysqli示例,使用面向对象的方法。仅在sql语句中使用select count,它更有效。
<?php
function mailExists($email, $link){
$sql= "SELECT COUNT(email) FROM users WHERE email = ? "; // use parameterized query
$stmt = $link-> prepare($sql);
$stmt -> bind_param('s',$email); // bind your variable to parameter
$stmt -> execute(); // execute the query
$stmt -> bind_result($CounterResult); // bind result into variable
$stmt -> store_result();
$stmt -> fetch();
}
return $CounterResult; // return total rows found
?>
我从here那里得到了例子。还有一些例子可以帮助你。希望这可以帮助任何人,谢谢。
答案 1 :(得分:0)
我不知道这段代码是否有问题,但我已经改变了它,以及其他功能中的其他一些修复,现在一切正常。另外我注意到我在$
错过了if(rows != 0) $result = 2; //mail exists in DB
,所以这可能导致了问题。在我更改了所有内容后找到它...仅发布功能代码:
function mailExists($email, $link){
$result = false; //no such mail
$query= "SELECT email FROM users WHERE email = '$email'";
if($stmt = mysqli_prepare($link,$query)){
mysqli_execute($stmt);
mysqli_stmt_store_result($stmt);
$rows = mysqli_stmt_num_rows($stmt);
mysqli_stmt_free_result($stmt);
mysqli_stmt_close($stmt);
}
$_SESSION['rowsDEB'] = $rows;
if($rows > 0) $result = true; //mail exists in DB
return $result;
}