我一直试图让这个问题持续数小时,而且我知道还有其他类似的主题,但我仍然卡住了...基本上我正在尝试列出所有姓氏以字母开头的客户答:
我在URL中传递一个名为lname的变量,如下所示:
然后我在PHP中抓取变量,如:
$lname = $_GET['lname'];
$lname = mysql_real_escape_string($lname);
// HERE'S THE PROBLEM AREA: then I try to put a simple query together like this:
$query = 'SELECT * FROM customers WHERE customers.lname LIKE "$lname%"';
// then I want to make sure $query and $lname have values in them, so I echo them out:
echo $query;
echo ' $lname = '.$lname;
// and the output is:
SELECT * FROM customers WHERE customers.lname LIKE "$lname%"
$lname = A
Unknown column '$lname' in 'where clause'
所以你可以在查询中看到,在LIKE之后,它应该说LIKE'A',但它正在解析为LIKE $ lname。我尝试了各种各样的变体,例如:
$ query ='SELECT * FROM customers WHERE customers.lname LIKE“。$ lname。”'; $ query ='SELECT * FROM customers WHERE customers.lname LIKE {$ lname}%'; 等,等等
很奇怪,但是客户表中的列名lname是绝对的,所以我不知道为什么它在'where子句'中报告'未知列'$ lname'的错误
对于记录,当我手动更改查询以包含我想要的值时,它会完美地输出客户名称列表:
$query = 'SELECT * FROM customers WHERE customers.lname LIKE "A%"';
...所以查询有效,但我无法插入$ lname。
感谢您的帮助。如何让我的变量$ lname在我的mysql查询中传递$ lname里面的VALUE?
答案 0 :(得分:1)
$ query =“SELECT * FROM customers WHERE customers.lname LIKE'$ lname%'”;
在上一行中交换单引号和双引号。
答案 1 :(得分:1)
您应该考虑使用参数化查询。例如,
$sql = "SELECT * FROM customers WHERE customers.lname LIKE ?";
$stm = $pdo->prepare($sql);
$stm->execute(array($lname));
这将有助于解决您可能遇到的许多问题,并且更加安全。