Php 对PDO的MySQL查询
我正在从MySQL切换到PDO,我不确定这个查询是否正确。。我仍然需要编写if命令Php 对PDO的MySQL查询,php,mysql,pdo,Php,Mysql,Pdo,我正在从MySQL切换到PDO,我不确定这个查询是否正确。。我仍然需要编写if命令 public function User_Login($_iUsername,$_iPassword) { $username=mysql_real_escape_string($_iUsername); $password=mysql_real_escape_string($password); $md5_password=md5($_iPassword); $query=mys
public function User_Login($_iUsername,$_iPassword) {
$username=mysql_real_escape_string($_iUsername);
$password=mysql_real_escape_string($password);
$md5_password=md5($_iPassword);
$query=mysql_query("SELECT _iD FROM users WHERE _iUsername='$_iUsername' and _iPassword='$md5_password' AND _iStatus='1'");
if( mysql_num_rows( $query ) == 1 ) {
$row = mysql_fetch_array( $query );
return $row['_iD'];
} else {
return false;
}
}
到
首先,您没有正确地参数化查询。使用PDO很好,但更改的主要目的之一是能够参数化查询。其次,
md5
是一个非常弱的散列。我建议改用bcrypt。最后,PDOStatement::rowCount
是您要寻找的方法
$sth = $db->prepare("SELECT _ID FROM users WHERE _iUsername = ?
AND _iPassword = ? AND _iStatus = 1");
$sth->execute(array($_iUsername, $md5_password));
if ($sth->rowCount() == 1) {
$row = $sth->fetch(PDO::FETCH_ASSOC);
return $row['_iD'];
}
else {
return false;
}
参数化查询是有利的,因为它可以防止SQL注入攻击。我同意爆炸药丸,但我想我会发布一个小建议-如果您只需要一行和一个值,我不明白为什么您要尝试获取一个数组,然后解析它。只需使用
fetchColumn()
execute
s参数应该是一个数组numRows
应该是rowCount
,没有叫做FETCH\u ARRAY
@JordanDoyle的常量已经纠正了其他的,但是更新了FETCH\u ARRAY
谢谢你们的回复,伙计们,“WHERE\u sername=”旁边的问号是什么。
$sth = $db->prepare("SELECT _ID FROM users WHERE _iUsername = ?
AND _iPassword = ? AND _iStatus = 1");
$sth->execute(array($_iUsername, $md5_password));
if ($sth->rowCount() == 1) {
$row = $sth->fetch(PDO::FETCH_ASSOC);
return $row['_iD'];
}
else {
return false;
}