编码以下内容的正确方法是什么
SELECT * FROM table WHERE value = $row['item']
$row['item']
回声正确,但似乎不适用于mysql查询。几天来一直有这个问题。我尝试了.$row['item'].
和其他一些变化,但我一定做错了。
答案 0 :(得分:1)
更合适的方法是使用mysqli和预处理语句,即:
$stmt = $mysqli->prepare("SELECT * FROM table WHERE value =?");
$stmt->bind_param("s",$row['item']); // I am assuming row['item'] is a string
$stmt->execute();
如果您不能使用mysqli或绝对拒绝,您可以使用:
$query = "SELECT * FROM table WHERE value = '".mysql_real_escape_string($row['item'])."'";
答案 1 :(得分:1)
答案类型取决于$row['item']
变量中的内容。如果它是一个数值,那么上面的查询应该没问题。由于它不起作用,我假设该变量的值实际上是一个字符串。在这种情况下,您需要将值括在引号中,以便数据库可以正确地将其标识为字符串值(否则,它只会是乱码"命令"数据库无法识别,导致查询失败)。
无论如何,在任何情况下都不应该直接将变量插入到查询中。原因是,如果您不是非常小心的话,它会让您注意SQL注入。例如,如果您的$row['item']
变量在查询中包含在单引号中,但包含其值中的单引号,则数据库会将变量中的引号解释为结束引号对于整个参数,它会搞砸查询。更糟糕的是,黑客可以利用这个来完全结束你的查询,然后在其上添加他自己制作的第二个查询(或者他们可以在原始结尾处引入UNION查询等)。至少,在使用变量之前,你应该在变量上运行mysql_real_escape_string()
之类的东西:
$sql = "SELECT * FROM table WHERE value = " .
mysql_real_escape_string($row['item']);
解决此问题并确保查询安全的最佳方法是使用预准备语句。这些是在其中包含占位符而不是连接变量的查询。您使用这些占位符准备查询,然后向数据库发出其他命令,以告知它在这些占位符中放置哪些值。然后,数据库负责处理清理这些变量的棘手问题,以免它们造成任何损害。您可以使用PDO:
try {
$dbh = new PDO(DB_DSN,
DB_USER,
DB_PASS,
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
exit();
}
// create query with a named placeholder
$sql = "SELECT * FROM table WHERE value = :value";
try {
$stmt = $dbh->prepare($sql);
// tell PDO to substitute the value in $row['item']
// for the named parameter specified above.
$stmt->bindValue(":value", $row['item']);
// execute the query and load the results into an array
$stmt->execute();
$records = $stmt->fetchAll();
} catch (PDOException $e) {
echo "Query failed: " . $e->getMessage();
exit();
}
foreach ($records as $record) {
// use db records
}
答案 2 :(得分:0)
我通常建议这样做的方式是这样的:
$sql = sprintf("SELECT * FROM table WHERE value = '%s'",
mysql_real_escape_string($row['item']));
答案 3 :(得分:0)
$item = mysql_real_escape_string($row['item']);
$mysqlQuery = "SELECT * FROM table WHERE value = '" . $item . "'";
答案 4 :(得分:-2)
你缺少单引号
SELECT * FROM table WHERE value = '{$row['item']}'
PHP示例