当我必须通过也使用引号的 PHP 语句将它们放在一起时,我无法将包含引号的 mySQL 查询放在一起,而当我添加 PHP 变量时,这会变得更加混乱。到目前为止,我想出的最好的是这样的:
$sqlQuery = 'SELECT document FROM `mentioned_places` WHERE name="'.$mentionedPlace.'";';
这实际上只是一个引号的泥潭。有没有更简单的方法来做到这一点?
您可以使用双引号:
$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;