我的问题是:
<?php
function user_exists($username) {
$username = sanitize($username);
return (mysql_result(mysql_query("SELECT_COUNT('user_id') FROM `user` WHERE `username` = '$username'"), 0) == 1) ? true : false;
}
?>
正如你所看到的,我已经包含了我的数据库名称,这是正确的,用户确实存在,这就是我调用它从sql:
拉<?php
include 'core/init.php';
if (user_exists('dan') === true) {
echo 'exists';
}
die();
if (empty($_POST) === false) {
$username = $_POST['username'];
$password = $_POST['password'];
if(empty($username) === true || empty($password) === true {
$errors[] = 'You need to enter a username and password';
} else if (user_exists($username) === false) {
$errors[] = 'Sorry this user does not exist';
}
}
?>
我不知道为什么我得到一个空白页,它不是显示消息说用户存在?
除了你的查询中那个愚蠢的错别字,你使用mysql API的方式确实很糟糕。
需要注意的一些关键缺陷
- 任何用于构建查询的"消毒"函数都应该在返回值周围添加引号。否则会导致你打针。
- 你没有检查mysql错误
- 你在一行中编写代码,这使得它非常难以阅读。
它至少应该是什么
function user_exists($username) {
$username = sanitize($username); // remember it should add the quotes
$sql = "SELECT COUNT(1) FROM `user` WHERE `username` = $username";
$res = mysql_query($sql) or trigger_error(mysql_error().$sql);
$row = mysql_fetch_row($res);
return !empty($row[0]);
}
我不知道为什么我得到一个空白页。
很可能是由PHP错误引起的。
要么告诉PHP在屏幕上显示它们,要么窥视服务器错误日志以读取错误消息
或者数据库中没有这样的用户。
让你的代码像这样
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
echo "testing<br>";
include 'core/init.php';
if (user_exists('dan')) {
echo 'exists';
} else {
echo 'not found';
}
这里可能是你的语法错误,不可能是fire
(mysql_result(mysql_query("SELECT_COUNT('user_id') FROM `user` WHERE `username` = '$username'"), 0) == 1) ? true : false;
在SELECT COUNT
之间留出空格,删除下划线"_",因为它会给你mysql错误
问题就在这里
SELECT_COUNT('user_id')
^
应该 SELECT COUNT('user_id')