我有一个html表单供用户登录网站,但我想检查以下查询是否返回true或false,我正在使用PDO,所以我不能使用方法mysql_num_rows();
<?php
$view = new stdClass();
$view->login = 'Homepage';
if(isset($_POST['firstName']) && isset($_POST['password']) )
{
$_firstName = $_POST['firstName'];
$password= $_POST['password'];
$user = new UserPassword(); $user->getLogin($_firstName, $passWord);
}
require_once('Views/login.phtml');
public function getLogin($userName,$passWord) {
$sqlQuerys = "SELECT `id`, `username`, `password`, `firstname`, `surename` FROM `sta177users` WHERE username = ' $userName' AND password = '$password'";
echo $sqlQuerys;
$statement = $this->_dbHandle->prepare($sqlQuerys);
$statement->execute();
}
}
答案 0 :(得分:1)
您实际上并未执行任何查询。您正在设置变量,但不执行代码。
此外,通过使用外部变量构建SQL语句,您将对SQL注入攻击保持开放。此外,任何带有单引号的输入数据,如名称“O'Malley” ,会炸毁你的SQL查询。请了解如何使用参数化查询(最好使用PDO模块)来保护您的Web应用程序。我的网站http://bobby-tables.com/php有一些示例可以帮助您入门,this question有很多详细示例。
答案 1 :(得分:0)
您执行查询并获取一行。如果该获取的结果不为空,则表示您拥有有效的用户。
非常重要:您需要对密码进行加密和散列,并使用预准备语句来避免sql注入。
答案 2 :(得分:0)
尝试此解决方案
$query="SELECT `id`, `username`, `password`, `firstname`, `surename` FROM `sta177users` WHERE username = ' $_firstName' AND password = '$password'";
$query->execute();
$rows = $query->fetchColumn();
if($rows == 1){
return true;
}else{
return false;
}
答案 3 :(得分:0)
你想做这样的事情:
function emptyQuery($db) // assume $db is your PDO object
{
// your prepared sql statement with PDO::prepare()
$sql = $db->prepare("SELECT `id`,
`username`,
`password`,
`firstname`,
`surename`
FROM
`sta177users`
WHERE
username = ' $_firstName'
AND password = '$password'
");
// execute it with PDO::execute()
$sql->execute();
// return all the rows with PDO::fetchAll(), and then see if the array is empty().
return empty($sql->fetchAll());
}
?>
这应该实现您的规范。您可以使用count()进行计数等。
当然,不要放弃文档: http://us2.php.net/pdo
希望有所帮助!