在PHP中执行依赖于变量的SQL查询

时间:2010-07-06 08:15:42

标签: php sql mysql

我正在尝试在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']的值合并到我的查询中?

3 个答案:

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