我正在尝试在PHP中执行以下查询
$sqlstr = mysql_query("SELECT * FROM sales where passport = $row['passport']");
if (mysql_numrows($sqlstr) != 0) {
while ($row = mysql_fetch_array($sqlstr)) {
echo $row['firstname'];
}}
如何将$ row ['passport']的值合并到我的查询中?
答案 0 :(得分:7)
首先,你忘记了单引号。 sAc在他的回答中已经纠正了这一点。但由于安全性问题,我会考虑使用转义功能:
$sqlstr = mysql_query("
SELECT
*
FROM
sales
WHERE
passport = '" . mysql_real_escape_string($row['passport']) . "'");
答案 1 :(得分:5)
你缺少引号:
$sqlstr = mysql_query("SELECT * FROM sales where passport = '{$row['passport']}'");
答案 2 :(得分:5)
我会避免手动转义/清理变量,只使用预处理语句。这是我在网络开发生涯中很久才学到的东西,我希望我早点知道。它可以为您节省很多麻烦,并且更安全。
您可以使用mysqli_stmt
class使用预准备语句执行MySQL查询,也可以使用PHP Data Objects (PDO) extension,它适用于MySQL,PostgreSQL和其他RDBMS。
只是为了告诉你它的样子,这是PDOStatement->bindParam
doc page的第一个例子:
<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>