麻烦将php变量传递给mysql字符串

时间:2014-01-08 03:06:11

标签: php mysql

我一直试图让这个问题持续数小时,而且我知道还有其他类似的主题,但我仍然卡住了...基本上我正在尝试列出所有姓氏以字母开头的客户答:

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

2 个答案:

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

这将有助于解决您可能遇到的许多问题,并且更加安全。