Я создал соединение PDO и запрос, теперь мне нужно, чтобы он был защищен от SQL-инъекций
Вот мой код
Пользовательский ввод
<?php $search=$_GET["Search"];?>
SQL, который запрашивает DB
<?php
// Issue the query
$Recordset1 = $dbh->query("SELECT * FROM catelogue
WHERE catelogue.TITLE LIKE '$search'");
$Recordset1->setFetchMode(PDO::FETCH_ASSOC);
?>
Выбрать строки
<?php $row_Recordset1 = $Recordset1-> fetch(); ?>
После этого появляется таблица с циклом do-while для отображения всего, что было возвращено
Как мне подготовить заявление для моего запроса?
Спасибо
EDIT:
Хорошо. Последний фрагмент кода, который выложил DavdRew, помог снова запустить мой поиск. Теперь у меня 2 новые проблемы.
Проблема 1: После нескольких запросов я получаю это сообщение
mysql_pconnect () [function.mysql-pconnect]: сервер MySQL пропал
Это все еще показывает остальную часть моей страницы с тем, что я искал. Как это исправить?
Тогда задача 2:
При каждом поиске первая возвращаемая запись является пустой, пустой записью. Он никогда не делал этого раньше, почему он делает это сейчас?
Большое спасибо DavdRew
РЕДАКТИРОВАТЬ: ДОБАВЛЕНО БОЛЬШЕ КОДА
ЭТО ВЕСЬ КОД PDO
<?php
$hostname_EchosPDO = "localhost";
$username_EchosPDO = "echos";
$password_EchosPDO = "echos";
$database_EchosPDO = "full catelogue";
$connStr = 'mysql:host=localhost;dbname=full catelogue';
try {
$dbh = new PDO($connStr, $username_EchosPDO, $password_EchosPDO);
/*** echo a message saying we have connected ***/
echo 'Connected to database';
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
<?php
$q = $dbh->prepare("SELECT * FROM catelogue WHERE catelogue.TITLE LIKE ?"); // prepare statement
if ($q->execute(array('sharpay%'))) // execute wirh passed params array($search)
{
$row_Recordset1 = $q->fetchAll(PDO::FETCH_ASSOC); // store fetched result into $rows;
}
else
{
$error = $dbh->errorInfo();
throw new Exception("SQLSTATE: {$error[0]}. {$error[1]} {$error[2]}");
}
?>
<?php /* $row_Recordset1 = $Recordset1-> fetch(); */ ?>
<?php do { ?>
<table width="800" border="0">
<tr>
<form action="/Echos Online/Detail.php" method="get"><input value='<?php echo $row_Recordset1['CAT NO.']; ?>' name="detail" type="hidden"/><td width='100' rowspan='4'><input type="image" img src="<?php echo $row_Recordset1['IMAGE PATH']; ?>" width="<?php if ($row_Recordset1['FORMAT']=='DVD') {echo "70";} else if ($row_Recordset1['FORMAT']=='DVD+CD') {echo "70";} else if($row_Recordset1['FORMAT']=='BLURAY+CD') {echo "81";}else if($row_Recordset1['FORMAT']=='BLURAY+DVD') {echo "81";} else if($row_Recordset1['FORMAT']=='BLURAY') {echo "81";} else {echo "100";} ?>" height="100"></td></form>
<td width="100">Artist:</td>
<td><?php echo $row_Recordset1['ARTIST']; ?></td>
</tr>
<tr>
<td width="100">Title</td>
<td><?php echo $row_Recordset1['TITLE']; ?></td>
</tr>
<tr>
<td width="100">Format</td>
<td><?php echo $row_Recordset1['FORMAT']; ?></td>
</tr>
<tr>
<td width="100">Cat. No.</td>
<td><?php echo $row_Recordset1['CAT NO.']; ?></td>
</tr>
<hr background-color="#e4a566" color="#e4a566"; width="100%"/>
<?php } while ($row_Recordset1 = $q-> fetch()); ?>
</table>
Честно говоря, теперь я возвращаюсь к preg_replace и mysql_real_escape_string
Спасибо за помощь