【发布时间】:2015-04-07 18:17:36
【问题描述】:
我有一个有趣的问题。
// 在带有函数的 pdo 中 --> 不起作用
function UserIsExist($name)
{
global $db;
$stmt = $db->prepare("SELECT id FROM tarskereso_users WHERE email = '$name' LIMIT 1");
$stmt->execute();
if ($stmt->fetchColumn() == 1) return 1;
else return 0;
}
// 使用 MySQLi --> 不工作
function UserIsExist($name)
{
global $db;
$stmt = $db->prepare("SELECT id,email FROM tarskereso_users WHERE email = ? LIMIT 1");
$stmt->bind_param('s', $name);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows == 1)
return 1;
else
return 0;
$stmt->close();
}
//在Register.php中
... other ..
if(UserIsExist($user) == 1)
$error_msg = "Is Exist";
else
{
$birthdate = $year.'.'.$month.'.'.$day;
CreateUser($user,$pass,$birthdate,$sex);
$error_msg = 'Success';
}
所以,功能不工作,我尝试:
$stmt = $db->prepare("SELECT id,email FROM tarskereso_users WHERE email = ? LIMIT 1");
$stmt->bind_param('s', $name);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0)
... other ...
else
echo 'isnt exist...';
$stmt->close();
但不起作用,num_rows 总是返回 0。并且数据库中的帐户已成功创建
【问题讨论】:
-
看起来您的查询正在寻找电子邮件,但您正在将名称传递给您的函数。这可能是问题吗?
-
您是否对所有涉及的变量(包括数据库连接变量)进行了
var_dump()? -
我的连接:$db = new PDO('mysql:host=127.0.0.1;dbname=asdelontest;charset=utf8', 'user', 'pw', array(PDO::ATTR_EMULATE_PREPARES = > 假,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)) var_dump($db); --> object(PDO)#1 (0) { } var_dump($name); --> 字符串(17)“hdasda@bassda.com”
-
我只尝试使用文本,我删除了 @ 和点,并且这个工作......但是 email = '$email' 字符串是真的