我试图将MySQL SELECT
查询与PHP变量连接起来,但是出现了错误。
我发出错误的PHP语句是:
$result=mysql_query("SELECT user_id,username,add FROM users WHERE username =".$user."AND password=".$add);
并且错误为:
( ! ) Notice: Undefined variable: info in C:\wamp\www\pollBook\poll\login.php on line 18
Call Stack
我不明白我错过了哪些代码。
当我编写没有WHERE
子句的查询时,它可以正常工作。
答案 0 :(得分:6)
您的代码无效的原因
您正在尝试使用尚未定义的变量$info
。当您尝试使用未定义的变量时,您实际上没有将任何内容连接到字符串中,但是因为PHP是松散类型的,所以它会在您引用它的第二个时声明该变量。这就是您看到notice
而不是fatal error
的原因。您应该检查代码,并确保$info
获取分配给它的值,并且在某个时候不会被另一个函数覆盖。但更重要的是,请阅读以下内容。
<小时/> 停止正在做的事
这很容易受到一种名为SQL Injection的攻击。我不打算告诉你如何连接SQL字符串。这是一种可怕的做法。
你应该不在PHP中使用mysql函数。它们已被弃用。而是使用带有预准备语句的PHP PDO对象。这是一个相当不错的tutorial。
实施例
在您阅读this tutorial之后,您将能够创建一个PDO对象,因此我将为您留下这一点。
下一步是使用prepare
方法添加您的查询:
$PDO->prepare("SELECT * FROM tbl WHERE `id` = :id");
// Loads up the SQL statement. Notice the :id bit.
$actualID = "this is an ID";
$PDO->bindParam(':id', $actualID);
// Bind the value to the parameter in the SQL String.
$PDO->execute();
// This will run the SQL Query for you.
答案 1 :(得分:0)
虽然查询中没有使用$ info变量,但您需要更正查询:
$result=mysql_query("SELECT user_id,username,add FROM users WHERE username ='" . $user . "' AND password='" . $add . "'");
答案 2 :(得分:0)
首先从错误中看起来你的一个变量没有被定义。 .. 核实。第二个用'更安全的语法环绕你的参数。
答案 3 :(得分:0)
您在“AND”之前缺少空格,您应该使用其他答案中建议的单引号。
$result=mysql_query("SELECT user_id,username,add FROM users WHERE *username =".$user."AND* password=".$add);
更新:
echo $sql = "SELECT user_id,username,add FROM users WHERE username ='".$user."' AND password='".$add."'";
$result=mysql_query($sql);
答案 4 :(得分:-2)
这是因为您使用的变量可能没有在上面定义
首先初始化你的变量,或者它来自其他地方(POST或GET)然后检查 isset 方法
完整的代码将是
$user = 123; // or $user = isset($user)?$user:123;
$add = 123456; // or $add = isset($add)?$add:123456;
然后运行您的查询
$result=mysql_query("SELECT user_id,username,add FROM users WHERE username =".$user."AND password=".$add);