PDO MySQL обрабатывает апостроф (‘) в именах

У меня возникают проблемы с моим запросом PDO, как только в имени, которое я ищу, есть апостроф, например D'Angelo, Имена без (‘) внутри имени работают нормально.

try {
$dbh = new PDO("mysql:host=$host;dbname=$dbname",$config['DB_USERNAME'],$config['DB_PASSWORD']);
foreach($dbh->query("SELECT * from position WHERE spieler='$playername'") as $row) {
echo ''.$row['pos'].'</td></tr>';
}
$dbh = null;
}
catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}

Обновить:

Таким образом, со всей помощью и намеками на подготовленные заявления я смог заставить это наконец работать.

    $dbh = new PDO("mysql:host=$host;dbname=$dbname",$config['DB_USERNAME'],$config['DB_PASSWORD']);
$stmt = $dbh->prepare("SELECT * from position WHERE spieler=:player1");
$stmt->execute(array(":player1" => $player1));
foreach ($stmt as $row) {
echo ''.$row['pos'].'</td></tr>';
}
$dbh = null;

-1

Решение

Это потому, что когда у вас есть имя с ' в нем ваш запрос выглядит так:

"SELECT * from position WHERE spieler='D'Angelo'"

что неверно, поэтому $ dbh-> query возвращает false, что является недопустимым аргументом для foreach. Чтобы быстро исправить, вам нужно изменить запрос с

"SELECT * from position WHERE spieler='$playername'"

в

"SELECT * from position WHERE spieler='" . addslashes($playername) . "'"

который даст вам

"SELECT * from position WHERE spieler='D\'Angelo'"

Как уже было отмечено, вы лучше справитесь с подготовленными утверждениями:

$stmt = $dbh->prepare("SELECT * from position WHERE spieler=:playername"$stmt->execute(array(':playername' => $playername));
while ($row = $dbh->fetch_assoc()) {
echo ''.$row['pos'].'</td></tr>';
}
2

Другие решения

Вы должны использовать подготовленное заявление.

$stmt = $dbh->prepare("SELECT * from position WHERE spieler= :playername")

if(isset($playername))
{
$stmt->bindParam(":playername", $playername);
}

$stmt->execute();
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector