数据库中的PHP数据检索问题
好吧,问题是。。。我是一个新手,我试图理解正在发生的事情。我通过html表单发送这个数据名,在数据库中使用POST发送电子邮件。我理解这一切背后的逻辑,但基本上发生的是,每次我输入一个名称,任何名称,它都会呼应else语句:已经有一个使用该名称的用户。它会发回数据库中的第一个名字。当没有名字时,它什么也不发送。因此,这里是块:数据库中的PHP数据检索问题,php,sql,database,Php,Sql,Database,好吧,问题是。。。我是一个新手,我试图理解正在发生的事情。我通过html表单发送这个数据名,在数据库中使用POST发送电子邮件。我理解这一切背后的逻辑,但基本上发生的是,每次我输入一个名称,任何名称,它都会呼应else语句:已经有一个使用该名称的用户。它会发回数据库中的第一个名字。当没有名字时,它什么也不发送。因此,这里是块: $query= "SELECT* from users where username='".$_POST['name']."'"; $result =
$query= "SELECT* from users where username='".$_POST['name']."'";
$result = mysql_query($query);
if (!$result){
$query = "INSERT into users (username, email, password) values
('".$_POST["name"]."', '".$_POST["email"]."',
'".$passwords[0]."')";
$result = mysql_query($query);
if ($result){
echo "It's entered!";
} else {
echo "There's been a problem: ".mysql_error();
}
} else {
echo "There is already a user with that name: <br />";
$sqlAll = "select * from users";
$resultsAll = mysql_query($sqlAll);
$row = mysql_fetch_array($resultsAll);
while ($row) {
echo $row["username"]." -- ".$row["email"]."<br />";
$row = mysql_fetch_array($result);
您可能希望检查而不是检查$结果,我认为如果查询成功,您将返回一个资源,即使它包含零行
您可能还需要阅读:根据,当出现错误时,mysql\u查询将返回false-对于SELECT、SHOW、DESCRIBE、EXPLAIN和其他返回resultset的语句,mysql\u查询成功时返回资源,错误时返回false。Escapeeee
首先,你需要学习逃跑。
你从没听说过小约翰尼的吊床吗
正经事
它总是返回的原因是$result中的响应实际上是一种资源数据类型。当强制转换为布尔值时,这将始终是真的。既然你的查询不应该失败
你应该去拿结果。例如这不是最好的方法,但这是一种方法
mysql_fetch_row(result)
在你的代码中看不到任何违反。第一个mysql_查询执行时没有错误,始终返回true。尝试按如下方式测试返回的行数:
if (mysql_num_rows($result) == 0) {
//insert record
} else {
// show alreay exists
}
首先,您正在测试:
if (!$result)
只有当查询失败时,它才会计算为true
在SQL查询中使用输入之前,还应清理所有输入。这是另一个SQL注入漏洞。他们都是从哪里来的。。。!?!?!?!?!?!?!?!?!?!?!?!我遵循了IBM网站上的教程。这是一个学习教程。伙计,我只是学习注射。我不会在真正的网站上使用它。我在学习@你能提供一个链接吗?我会写信给IBM,要求他们停止推广这种胡说八道。@seb:在线教程通常都是垃圾。给自己买本好书吧!顺便说一句,堆栈溢出不是一块板。如果$result==false,mysql将抛出一个错误,mysql\u num\u行预期参数为resource,但给定布尔值。