2013-07-23 81 views
0

當我必須通過也使用引號的PHP語句放置引號時,我無法將包含引號的mySQL查詢放在一起,而且當我添加PHP變量時,這會變得更加混亂。到目前爲止,我所得到的最好的是這樣的:PHP和mySQL中的引號

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

這實際上只是一個引號的泥潭。有沒有更簡單的方法來做到這一點?

+9

使用預處理語句(庫MySQLi/PDO),你會從這個爛攤子:) – HamZa

+0

http://php.net/manual/en/mysqli.prepare.php HTTP釋然:// PHP .net/manual/en/pdo.prepare.php –

+0

此外,您可以直接在雙引號字符串中使用變量:'$ a =「Hello $ world」;' –

回答

2

逃離一切。如果您正在使用mysql_語句,請停止使用它們,因爲它們已被棄用。看看PDOMysqli

如果您準備查詢,它們都會轉義符號,因此您還可以防止sql注入。

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; 
2

爲確保您的應用程序,你應該使用準備好的語句與MySQLiPDO

然後,您可以將您的變量與查詢分開並將它們綁定到語句。

0

您可以按照此過程給予報價MySQL查詢

請參閱本Link和 2. links

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