在查询中使用撇号

时间:2015-05-16 14:55:27

标签: php mysql special-characters

所以使用准备好的语句我试图用'

进行查询

我有一个名为$ awayteam的字符串,它持有:SSS'18 VR1

当我尝试使用上面的字符串查询数据库时,它不会工作....

$conn = new PDO($link, $pdo_username, $pdo_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM clublogo WHERE naam = :name");
//$stmt->bindParam(':name', $awayteam);
$stmt->bindParam(':name', $awayteam, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll();
foreach($result as $row){
$awayclublogo = sprintf($row[pad]);

}
$conn = null;

$ awayclublogo将为NULL

然而,当我使用TEXT时,它确实有效。

$conn = new PDO($link, $pdo_username, $pdo_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM clublogo WHERE naam = :name");
$stmt->bindValue(':name',  "SSS'18 VR1");
$stmt->execute();
$result = $stmt->fetchAll();
foreach($result as $row){
$awayclublogo = sprintf($row[pad]);

}
$conn = null;

好的,所以@Devon指出问题是由于HTML编码造成的。 告诉我看源头,确定他是对的。 SSS'18 VR

我从DB获取变量,如:

$conn = new PDO($link, $pdo_username, $pdo_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM vrip_uitslag WHERE GameID =     :name");
$stmt->bindParam(':name', $gameid);
$stmt->execute();
$result = $stmt->fetchAll();


foreach($result as $row) { 
$hometeam = sprintf($row[Thuis]);
$awayteam = sprintf($row[Uit]);
}

var_dump($ awayteam)将导致:string(15)“SSS'18 VR1” 然后我使用$ awayteam,所以我不知道HTML编码发生的地方......

2 个答案:

答案 0 :(得分:1)

我认为已经确定,这是使用预处理语句解决的,因为您正在使用PHP。这会自动处理。

在SQL中,您可以通过以下几种方式将其转义:

在它之前使用另一个撇号(单引号):

'SSS''18 VR1'

使用前面的反斜杠:

'SSS\'18 VR1'

答案 1 :(得分:0)

加倍单引号。添加额外的单引号以逃避它。

>> A
A =
     1     2
     1     3
     4     5
>> B
B =
     1     5
>> celldisp(out) %// To display the output, out
out{1} =
     1
     2
out{2} =
     3

如果您使用的是PDO,请使用prepared statements

SELECT * FROM clublogo WHERE name = 'SSS''18 VR1'

如果您使用变量,则必须使用bindParam

$dbh = new PDO("...");
$stmt = $dbh->prepare("SELECT * FROM clublogo WHERE name = :name");
$stmt->bindValue(':name',  "SSS'18 VR1");
$stmt->execute();
$result = $stmt->fetchAll();

PDO:Prepared statements