帮助PHP代码,从数据库中选择SELECT

时间:2015-07-04 05:32:14

标签: mysql php

<?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

4 个答案:

答案 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")

因为当您在没有简单引号的情况下发送变量$usernamepablorex192)时,您的SELECT语句正在执行,如下所示:

SELECT question FROM users WHERE user = pablorex192;

MySQL中的documentation说:

  

字符串是一个字节或字符序列,包含在单引号(“&#39;”)或双引号(“&#34;”)字符中。

当来自Php连接时,不要忘记在查询中添加简单的引号。