更新
我正在连接错误的数据库。是的,请吐我,我应得的。我很抱歉遇到了麻烦。
如果我试试这个,MySQL(通过PDO)不会返回任何结果
$db = new db('mysql:host='.DB_SERVER.';dbname='.DB_NAME, DB_USERNAME, DB_PASSWORD);
$email = 'alexandre@domain.com';
$mot_de_passe = 'Un mot et un chiffre 8?';
$bind= array(":email"=>$email, ":mot_de_passe"=>$mot_de_passe);
$results = $db->select("users", "email=:email AND mot_de_passe=:mot_de_passe", $bind);
但是如果尝试这个,MySQL会正确返回行。
$db = new db('mysql:host='.DB_SERVER.';dbname='.DB_NAME, DB_USERNAME, DB_PASSWORD);
$email = 'alexandre@domain.com';
$mot_de_passe = '1234';
$bind= array(":email"=>$email, ":mot_de_passe"=>$mot_de_passe);
$results = $db->select("users", 'email=:email AND mot_de_passe=:mot_de_passe', $bind);
如果$mot_de_passe = 'Pourquoi';
它也没有返回任何内容所以我认为它只接受数字。这是为什么?密码列的类型为VARCHAR(255)。
更新
我正在使用this PDO Wrapper class来管理与数据库的交易。
调查信息
使用PDO语法:
$sth = $db->prepare('SELECT * from `users` where email=:email AND mot_de_passe=:mot_de_passe');
$sth->bindValue(':email', $email, PDO::PARAM_STR);
$sth->bindValue(':mot_de_passe', $mot_de_passe, PDO::PARAM_STR);
$sth->execute();
$result = $sth->fetchAll();
$sth->debugDumpParams();
生成此调试信息:
SQL: [81] SELECT * from `users` where email=:email AND mot_de_passe=:mot_de_passe
Params: 2
Key: Name: [6] :email
paramno=-1
name=[6] ":email"
is_param=1
param_type=2
Key: Name: [13] :mot_de_passe
paramno=-1
name=[13] ":mot_de_passe"
is_param=1
param_type=2
以下是来自mysql的general_log文件的查询:
SELECT * from `users` where email='alexandre@domain.com' AND mot_de_passe='Pourquoi ?'
如果我直接使用此查询,则返回预期结果。如果我通过PDO使用它,则无法找到结果。
答案 0 :(得分:1)
为什么使用urldecode()
功能?它制动特殊符号,与mysql转义无关。
试试这个:
$email = 'alexandre@domain.com';
$mot_de_passe = 'Un mot et un chiffre 8?';
$bind= array(":email"=>$email, ":mot_de_passe"=>$mot_de_passe);
$results = $db->select("users", "email=:email AND mot_de_passe=:mot_de_passe", $bind);
以PDO风格试试这个:
$sth = $db->prepare('SELECT * from `users` where email=:email AND mot_de_passe=:mot_de_passe');
$sth->bindValue(':email', $email, PDO::PARAM_STR);
$sth->bindValue(':mot_de_passe', $mot_de_passe, PDO::PARAM_STR);
$sth->execute();
$result = $sth->fetchAll();
并检查,此查询是否返回了什么?
SELECT * from `users` where email='alexandre@domain.com' AND mot_de_passe='Un mot et un chiffre 8?';
答案 1 :(得分:0)
要回答标题中的问题,如果字符串包含密码,则Mysql选择查询从不会失败。
说到你自己的代码没有返回所需的结果 - 只需调试代码并仔细检查数据。