Поскольку я был доволен до моего сведения, что мой сайт был уязвим для атаки SQL-инъекций, я перешел от использования стандартного протокола подключения mysqli к PDO.Что не так с моим подготовленным заявлением PDO?
Поскольку строительство новых скриптов соединения и запросов я постоянно выброшен этой ошибке
Предупреждения: PDOStatement :: Execute(): SQLSTATE [HY093]: Неверный номер параметра: параметр не был определен в D: \ wamp \ www \ Kerr Pumps \ includes \ product_data.php on line 31
И, несмотря на посещение других сообщений на форуме, я не смог найти решение моей проблемы.
// Get a list of all the pumps in the database
function get_pumps($pType, $pVal, $gVal, $class_style) {
// PDO DB CONNECTION AS OF VERSION 1.1
// Check whether correct data is passed into function...
echo var_dump($pType);
echo var_dump($pVal);
echo var_dump($gVal);
// Local connection variables
$db_user = "root";
$db_pass = "root";
// Connect to the database
try
{
$connection = new PDO('mysql:host=localhost;dbname=kerrpumps', $db_user, $db_pass);
$stmt = $connection->prepare('SELECT * FROM pumps WHERE pump_type = :pType AND flow_psi = :pVal AND flow_gpm = :gVal AND high_psi = :pVal AND high_gpm = :gVal');
$stmt->execute(array('pump_type' => $pVal,
'flow_psi' => $pVal,
'flow_gpm' => $gVal,
'high_psi' => $pVal,
'high_gpi' => $gVal));
$result = $stmt->fetchAll();
// If there are results...
if (count($result))
{
foreach($result as $row){
$link = '#';
echo '<tr onclick="'."$link; window.location='$link'".'" class="'.($class_style %2 == 0 ? "row_dark" : "row_light").'">';
echo '<a href="#">';
include("grid_data.php");
echo '</a>';
$class_style++;
echo "</tr>";
}
}
// Else there are no results which match the query...
else {
echo "<tr class='styleOff'>
<td class='styleOff'>We're sorry, but there are no pumps which fit the given search criteria. Please try again.</td>
</tr>";
}
}
// Error handling
catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
Как уже говорилось выше, я новичок в PDO и, вероятно, пропустил что-то простое, любая обратная связь или указатели будут высоко оценили, спасибо-вам.
В массиве, что вы передаете для 'execute', вам нужно указать ключи с тем же именем, что и параметры, включая начальный двоеточие. Итак, первый должен быть ': pType' и т. Д. – andrewsi
Ahh Я вижу, это имеет смысл! Дурак я. – Alex