PHP和mySQL中的引号

时间:2013-07-23 10:36:56

标签: php mysql sql

当我必须通过也使用引号的PHP语句放置包含引号的mySQL查询时,我遇到了麻烦,当我添加PHP变量时,这变得更加混乱。到目前为止,我提出的最好的是这样的:

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

这真的只是一个引号的泥潭。有更简单的方法吗?

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

要保护您的应用程序,您应该使用MySQLiPDO准备好的语句。

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

答案 2 :(得分:1)

您可以使用 double quotes

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

但你最好使用prepared statements使用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;

答案 3 :(得分:0)

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

请参阅此Link和 2。links

它更有用。 最好你可以使用this link