Ошибка преобразования запроса SELECT mySQLi в PDO с подготовленными операторами - PullRequest
0 голосов
/ 10 июля 2019

Как можно переписать следующий простой SELECT сценарий mySQL PHP в PDO с подготовленными инструкциями, которые требуют перезаписи входного запроса POST, используя PDO.

<?php

    // Create connection
$con=mysqli_connect("localhost","username","password","dbname");

// Check connection
if (mysqli_connect_errno())

{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$FieldInput = $_POST['FieldInput'];

$return = ['error' => false];

$sql =  "SELECT Field1, Field2
        from Table1 WHERE (Field3 = '$FieldInput')";


$result = mysqli_query($con, $sql);
if($result && $result->num_rows > 0){
    $return['error'] = true;
}
mysqli_close($con);
echo json_encode($return);

?>

Вывод в PDO должен следовать тому же принципупоказывая

{"error":true}

, если записи найдены, и

{"error":false}

, если записи не найдены.

Это то, что я пробовал до сих пор:

Я считаю, что синтаксис для предложения WHERE является неправильным, поскольку входные данные из POST никогда не попадают в запрос

<?php
    $mysqli = new mysqli("server", "username", "password", "database_name");

    // TODO - Check that connection was successful.

    $unsafe_variable = $_POST["user-input"];

    $stmt = $mysqli->prepare("SELECT Field1, Field2 from Table1 WHERE ( Field3 = ? ) );

    // TODO check that $stmt creation succeeded

    // "s" means the database expects a string
    $stmt->bind_param("s", $unsafe_variable);

    $stmt->execute();

    $stmt->close();

    $mysqli->close();
?>

1 Ответ

0 голосов
/ 11 июля 2019

Это будет то, что вы ищете

<?php

// Create connection
$con=mysqli_connect("localhost","username","password","dbname");

// Check connection
if (mysqli_connect_errno())

{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$return = ['error' => false];
$query = 'SELECT Field1, Field2
    from Table1 WHERE (Field3 =?)';
$stmt = $con->prepare($query);
$stmt->bind_param("s", $fieldinput);
$fieldinput = $_POST['FieldInput'];
if ($stmt->execute()) {
   if ($stmt->rowCount() > 0) {
     $return['error'] = true;
   }    
 }
 $stmt->close();
 mysqli_close($con);
 echo json_encode($return);
 ?>

на случай, если для чего-то понадобятся все строки

 while ($row = $stmt->fetch()) {
   print_r($row);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...