Меняться PDO mysqli, введя данные в DB

Всегда они рекомендовали меня PDO на MySQLI, на которое мне хотелось бы менять мою связь во время ввождения данных во мне DB. Уже я использую PDO чтобы показывать данные клиенту.

Я использовал PDO следующей формы, он вводит мне данные правильно, но дает мне else в:

if ($conn->query($sql) == TRUE)

<?php
$conn = null;
  $host = '*******';
  $db =   '*******';
  $user = '*******';
  $pwd =  '*******';
try {
      $conn = new PDO('mysql:host='.$host.';dbname='.$db, $user, $pwd);

  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }


  $sql = "INSERT INTO avisos (.......) VALUES (...........)";

  if ($conn->query($sql) === TRUE) {

    echo "<script type='text/javascript'>
			window.location='https://*******';
			</script>";
  } else {
    echo "Error: " . $sql . "<br>" . $conn->error;
  }

  $conn->close();
}
  catch (PDOException $e) {
    echo 'Excepción capturada: ',  $e->getMessage(), "\n";
      exit;
  }
  return $conn;
 

?>
0
задан 13.06.2019, 11:13
1 ответ

Несколько вещей errГіneas в тебе cГіdigo, он ощущается, что остаются в Г©l реминисценции mysqli:

  1. PDO у него нет свойства connect_error. AdemГЎs, ошибки conexiГіn справляются в catch, не случайно ты соединяешь внутри одного try
  2. Для консультаций типа INSERT, UPDATE, DELETE convendrГ - в mГЎs хорошо возвращать количество поврежденных линий используя rowCount() вместо того, чтобы проверять то, что возвращает query, который является объектом PDOStatement [ видеть раздел возвращенных типа Стоимости в doc ] .
  3. PDO у него нет свойства error. Ошибки подбирают посредством mГ©todo errorInfo(), в котором, ГЛАЗЕ, он возвращает array. И, ГЛАЗ, так она conexiГіn как statement у них есть этот mГ©todo. AquГ - он называется mГ©todo statement.

Применяясь выше сказанное, ты cГіdigo podrГ, - чтобы оставаться asГ-:

<?php
    $conn = null;
    $host = '*******';
    $db =   '*******';
    $user = '*******';
    $pwd =  '*******';
    try {
            $conn = new PDO('mysql:host='.$host.';dbname='.$db, $user, $pwd);
            $sql = "INSERT INTO avisos (.......) VALUES (...........)";
            if ( $stmt = $conn->query($sql) ) {

                $info = sprintf( "Se insertaron %d filas",$stmt->rowCount() );
                #Usar $info en la salida si quieres
                echo "<script type='text/javascript'>
                        window.location='https://*******';
                      </script>";
            } else {
                # errorInfo() devuelve un array y en el mensaje está en el índice 2
                echo "Error: " . $sql . "<br>" . $stmt->errorInfo()[2];
            }

            $conn->close();
    }
      catch (PDOException $e) {
        echo 'Excepción capturada: ',  $e->getMessage(), "\n";
    } 

?>

я исправил другие вещи, как снимание return объекта conexiГіn. Он не имеет смысл, ademГЎs, ты закрываешь ее внутри try. Я снял призывы к свойствам, которые не существуют. И, старайся предотвращать exit() и die(). Лучше контролировать cГіdigo и о том, чтобы возвратить переменные с нею informaciГіn, когда он будет необходим.

0
ответ дан 02.12.2019, 00:54