所以使用准备好的语句我试图用'
进行查询我有一个名为$ 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编码发生的地方......
答案 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();