在查询中使用撇号
Using an apostrophe inside a query
所以使用准备好的语句我试图用'
查询
我有一个名为 $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
我正在从数据库中获取变量,例如:
$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 编码发生在哪里....
我认为已经确定这是使用准备好的语句解决的,因为您正在使用 PHP。这会自动处理。
一般来说,在 SQL 中,您可以通过几种方式转义它:
在它前面使用另一个撇号(单引号):
'SSS''18 VR1'
在它前面使用反斜杠:
'SSS\'18 VR1'
双引号。添加一个额外的单引号来转义它。
SELECT * FROM clublogo WHERE name = 'SSS''18 VR1'
如果您正在使用 PDO,请使用 prepared statements。
$dbh = new PDO("...");
$stmt = $dbh->prepare("SELECT * FROM clublogo WHERE name = :name");
$stmt->bindValue(':name', "SSS'18 VR1");
$stmt->execute();
$result = $stmt->fetchAll();
如果要使用变量,则必须使用 bindParam。
$dbh = new PDO("...");
$stmt = $dbh->prepare("SELECT * FROM clublogo WHERE name = :name");
$stmt->bindParam(':name', $awayteam, PDO::PARAM_STR);
$awayteam = "SSS'18 VR1";
$stmt->execute();
$result = $stmt->fetchAll();
所以使用准备好的语句我试图用'
查询我有一个名为 $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
我正在从数据库中获取变量,例如:
$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 编码发生在哪里....
我认为已经确定这是使用准备好的语句解决的,因为您正在使用 PHP。这会自动处理。
一般来说,在 SQL 中,您可以通过几种方式转义它:
在它前面使用另一个撇号(单引号):
'SSS''18 VR1'
在它前面使用反斜杠:
'SSS\'18 VR1'
双引号。添加一个额外的单引号来转义它。
SELECT * FROM clublogo WHERE name = 'SSS''18 VR1'
如果您正在使用 PDO,请使用 prepared statements。
$dbh = new PDO("...");
$stmt = $dbh->prepare("SELECT * FROM clublogo WHERE name = :name");
$stmt->bindValue(':name', "SSS'18 VR1");
$stmt->execute();
$result = $stmt->fetchAll();
如果要使用变量,则必须使用 bindParam。
$dbh = new PDO("...");
$stmt = $dbh->prepare("SELECT * FROM clublogo WHERE name = :name");
$stmt->bindParam(':name', $awayteam, PDO::PARAM_STR);
$awayteam = "SSS'18 VR1";
$stmt->execute();
$result = $stmt->fetchAll();