SQL 使用 PhP 在网络上工作时出错
SQL Error while working on web with PhP
虽然在 table "users" 的数据库 "tutorial" 中提供了正确的登录 ID 和密码,但在 login.php 正在重定向。
错误是:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ''users' WHERE 'user' = 'XYZ'' at line 1
其中 XYZ 是用户提供的用户名。
<?php
$inputuser = $_POST["user"];
$inputpass = $_POST["pass"];
$user = "root";
$password = "";
$database = "tutorial";
$connect = mysql_connect("localhost", $user, $password);
@mysql_select_db($database) or die("Database not found");
$query = "SELECT * FROM 'users' WHERE 'user' = '$inputuser'";
$querypass = "SELECT * FROM 'users' WHERE 'password' = '$inputpass'";
$result = mysql_query($query) or die(mysql_error());
$resultpass = mysql_query($querypass) or die( mysql_error());
$row = mysql_fetch_array($result);
$rowpass = mysql_fetch_array($resultpass);
$serveruser = $row["user"];
$serverpass = $row["password"];
if ($serveruser && $serverpass){
if(!$result){
die("Username Name or Password is invalid");
}
echo "<br><center>Database Output</b> </center><br><br> ";
mysql_close();
echo $inputpass;
echo $serverpass;
if($inputpass == $serverpass){
header('Location: home.php');
} else {
echo "Sorry, bad Login";
}
}
?>
Abhik Chakraborty 是正确的。
如果您想包含 field/column 或 table 名称,您必须使用反引号(所以用 ` 而不是 ')。反引号是 "Tab".
上方按钮上“1”旁边的斜引号
要将字段值括起来,您应该像以前一样使用引号。
您更正的查询:SELECT * FROM `users` WHERE `user` = '$inputuser';
无论如何,您应该永远,永远将从用户那里获得的输入直接插入到查询中。如果他们输入类似 a';DROP TABLE your_table_name;
的内容,他们可能会导致您的数据库开始删除 table、请求记录等
使用正确的用户输入转义:see this Whosebug article on how to safely escape user input。
您应该使用反引号 (`) 而不是单引号
虽然在 table "users" 的数据库 "tutorial" 中提供了正确的登录 ID 和密码,但在 login.php 正在重定向。
错误是:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users' WHERE 'user' = 'XYZ'' at line 1
其中 XYZ 是用户提供的用户名。
<?php
$inputuser = $_POST["user"];
$inputpass = $_POST["pass"];
$user = "root";
$password = "";
$database = "tutorial";
$connect = mysql_connect("localhost", $user, $password);
@mysql_select_db($database) or die("Database not found");
$query = "SELECT * FROM 'users' WHERE 'user' = '$inputuser'";
$querypass = "SELECT * FROM 'users' WHERE 'password' = '$inputpass'";
$result = mysql_query($query) or die(mysql_error());
$resultpass = mysql_query($querypass) or die( mysql_error());
$row = mysql_fetch_array($result);
$rowpass = mysql_fetch_array($resultpass);
$serveruser = $row["user"];
$serverpass = $row["password"];
if ($serveruser && $serverpass){
if(!$result){
die("Username Name or Password is invalid");
}
echo "<br><center>Database Output</b> </center><br><br> ";
mysql_close();
echo $inputpass;
echo $serverpass;
if($inputpass == $serverpass){
header('Location: home.php');
} else {
echo "Sorry, bad Login";
}
}
?>
Abhik Chakraborty 是正确的。
如果您想包含 field/column 或 table 名称,您必须使用反引号(所以用 ` 而不是 ')。反引号是 "Tab".
上方按钮上“1”旁边的斜引号要将字段值括起来,您应该像以前一样使用引号。
您更正的查询:SELECT * FROM `users` WHERE `user` = '$inputuser';
无论如何,您应该永远,永远将从用户那里获得的输入直接插入到查询中。如果他们输入类似 a';DROP TABLE your_table_name;
的内容,他们可能会导致您的数据库开始删除 table、请求记录等
使用正确的用户输入转义:see this Whosebug article on how to safely escape user input。
您应该使用反引号 (`) 而不是单引号