0

当我必须通过也使用引号的 PHP 语句将它们放在一起时,我无法将包含引号的 mySQL 查询放在一起,而当我添加 PHP 变量时,这会变得更加混乱。到目前为止,我想出的最好的是这样的:

$sqlQuery = 'SELECT document FROM `mentioned_places` WHERE name="'.$mentionedPlace.'";'; 

这实际上只是一个引号的泥潭。有没有更简单的方法来做到这一点?

4

4 回答 4

2

逃离一切。如果您正在使用mysql_语句,请停止使用它们,因为它们已被弃用。看看PDOMysqli

如果您准备查询,它们都会转义符号,因此您还可以防止 sql 注入。

于 2013-07-23T10:40:26.380 回答
2

为了保护您的应用程序,您应该使用带有MySQLiPDO的准备好的语句。

然后,您可以将变量与查询分开并将它们绑定到语句。

于 2013-07-23T10:41:28.003 回答
1

您可以使用双引号

$sqlQuery = "SELECT document FROM `mentioned_places` WHERE name='$mentionedPlace'"; 

但是你最好将准备好的语句与 mysqli 或 PDO 一起使用。

使用 mysqli:

$db = new mysqli(...);
$sql = "SELECT document FROM `mentioned_places` WHERE name = ?";
$query = $db->prepare($sql);
$query->bind_param("s", $mentionedPlace);
$query->execute();
$query->bind_result($document);
$documents = array();
while ($query->fetch()) {
    $documents[] = $document;
}
$db->close();

使用 PDO:

try {
    $db = new PDO('mysql:host=localhost;dbname=test;charset=UTF8', 'user', 'userpwd');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $sql = "SELECT document FROM `mentioned_places` WHERE name = ?";
    $query = $db->prepare($sql);
    $query->execute(array($mentionedPlace));
    $documents = $query->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    echo "Exeption: " .$e->getMessage(); //TODO better error handling
}
$query = null;
$db = null;
于 2013-07-23T10:41:06.117 回答
0

您可以按照此过程为 MYSQL 查询提供报价

请参阅此链接和 2.链接

它更有用。更好的是你可以使用这个链接

于 2013-07-23T10:47:54.697 回答