<?php session_start();
include ('connection.php');?>
<?php
$username='pablorex192';
$consulta=mysql_query("SELECT question FROM users WHERE user = $username") or die ('This is the error: '.mysql_error());
echo $consulta
?>
这是错误:未知栏&#39; pablorex192&#39;在&#39; where子句&#39;
它给了我这个错误,我真的不知道为什么,这里有我数据库的一些截图。 http://puu.sh/iMFy3/d23d9b0942.png http://puu.sh/iMFyQ/8343a4876c.png
答案 0 :(得分:2)
首先不应再使用mysql _ *()函数了。他们已经弃用了,很快就会被删除。改为使用MySQLi或PDO。
其次,我怀疑您是从输入表单中提取用户名,这意味着您无法控制在那里写的内容。这意味着简单地将其连接到查询中就会让您打开SQL注入,这不好。 使用预备语句,或至少使用DB的正确转义函数。
第三,我的一个小小的烦恼:如果你在同一个文件中粘贴了这些行,你就不应该在它们之间退出PHP模式。
以上所有组合为我们提供了以下代码:
// Start the session and SQL connection, assuming PDO.
session_start ();
include ("connection.php");
// Check for posted content here. If none, show the input form and exit.
if (!submitted ()) {
return;
}
// Validate that we actually have something that could be a username.
if (!ctype_alnum ($_POST['username'])) {
// Input contained illegal characters, add error to output.
return;
}
// Create the prepared statement to fetch the (security?) question from the database.
$stmt = $DB->prepare ("SELECT question FROM users WHERE user = ?");
if (!$stmt->exec (array ($_POST['username']))) {
// Failed, add error to output.
return;
}
// Now we've got the question.
$question = $stmt->fetch()[0];
您还会注意到我删除了#echo; mysql_error()&#34;,因为这是永远不会向用户显示的内容。它允许潜在的攻击者学习有关系统的大量有用信息。
PS:您还会注意到,通过使用准备好的陈述,您不必通过引用字符串进行调整。数据库驱动程序为您完成。 ;)
答案 1 :(得分:0)
你应该写:
$consulta=mysql_query("SELECT question FROM users WHERE user = '$username'") or die ('This is the error: '.mysql_error());
请注意$username
周围的单引号,以便它成为SQL查询中的字符串,否则将其视为列名。
答案 2 :(得分:0)
您应该使用单个逗号,因为您的变量包含字符串值。如果您的变量使用整数值,那么它将起作用。
所以你可以写
"SELECT question FROM users WHERE user = '$username'"
或
"SELECT question FROM users WHERE user = '".$username."'"
答案 3 :(得分:0)
你应该写:
("SELECT question FROM users WHERE user = '$username'");
相反:
("SELECT question FROM users WHERE user = $username")
因为当您在没有简单引号的情况下发送变量$username
(pablorex192
)时,您的SELECT
语句正在执行,如下所示:
SELECT question FROM users WHERE user = pablorex192;
MySQL中的documentation说:
字符串是一个字节或字符序列,包含在单引号(“&#39;”)或双引号(“&#34;”)字符中。
当来自Php连接时,不要忘记在查询中添加简单的引号。