PHP 7.x SQLITE3 PDO - исполняет ли () закрытие соединения PDO? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть этот код, который странно работает с SQLITE3, так как тот же код с MYSQL работает отлично

Проблема в том, что строка, закомментированная с «ISSUE» в строке № 31, потому что с MYSQL / MariaDB, котораясоединение "НЕ требуется

Теперь я лучше объясню

Если процедура IF не введена, у меня НЕТ ошибки

Если процедура IF обрабатывается, строка # 34 выбрасывает

Uncaught Error: Call to undefined method PDOStatement::prepare()

, как если бы $ PDO-execute (); внутри IF уничтожает истоки PDO

Вы можете сказать, ну, нет проблем, теперь выЯ исправил это ... да, но я хотел бы понять, почему это происходит.

Кроме того, переносимость является точкой.Если это PDO ... за исключением соединения, остальная часть сценария должна работать и перемещаться между различными поддерживаемыми БД PDO

Спасибо, если вы любезно намекните, в чем причина и что это

<?php

// Create or open a database file
$PDO = new PDO('sqlite:myDatabase.sqlite3');


if( isset($_POST['NoteUpdateText'])  && !empty(trim($_POST['NoteUpdateText'])) ){

    //$testo = $_POST['NoteUpdateText'];

    try {

            $PDO = $PDO->prepare('UPDATE ajax SET testo = :testo WHERE id = :id');
            $PDO->bindValue(':testo', $_POST['NoteUpdateText']);
            $PDO->bindValue(':id', 1);
            $PDO->execute();

        // echo a message to say the UPDATE succeeded
        //echo $stmt->rowCount() . " records UPDATED successfully";
        }
    catch(PDOException $e)
        {
        echo $sql . "<br>" . $e->getMessage();
        }
}

// In EVERY case, load the actual DB record and return it to javascript

$PDO = new PDO('sqlite:myDatabase.sqlite3');  // --- ISSUE, theoretically this is already opened at line #3 ---

    try {
            $PDO = $PDO->prepare('SELECT testo FROM ajax WHERE id=1 LIMIT 1'); 
            $PDO->execute(); 
            $row = $PDO->fetch();
            //var_dump($row);
            echo $row["testo"];
        }
    catch(PDOException $e)
        {
        echo $sql . "<br>" . $e->getMessage();
        }       

?>

ФИКСИРОВАННЫЙ КОД

<?php

//include 'db-con2.php';
// table: ajax  
// col: testo

// Create or open a database file
$PDO = new PDO('sqlite:myDatabase.sqlite3');

if( isset($_POST['NoteUpdateText'])  && !empty(trim($_POST['NoteUpdateText'])) ){

    //$testo = $_POST['NoteUpdateText'];

    try {

            $statement = $PDO->prepare('UPDATE ajax SET testo = :testo WHERE id = :id');
            $statement->bindValue(':testo', $_POST['NoteUpdateText']);
            $statement->bindValue(':id', 1);
            $statement->execute();

        // echo a message to say the UPDATE succeeded
        //echo $stmt->rowCount() . " records UPDATED successfully";
        }
    catch(PDOException $e)
        {
        echo $sql . "<br> - IF -" . $e->getMessage();
        }
}

// carica da DB in ogni caso per caricare il P col testo realmente in DB
//$PDO = new PDO('sqlite:myDatabase.sqlite3');

    try {
            $statement = $PDO->prepare('SELECT testo FROM ajax WHERE id=1 LIMIT 1'); 
            $statement->execute(); 

            $row = $statement->fetch();
            //var_dump($row);
            echo $row["testo"];
        }
    catch(PDOException $e)
        {
        echo $sql . "<br> - NORMALE - " . $e->getMessage();
        }       

?>

1 Ответ

0 голосов
/ 27 февраля 2019

Зачем вам переопределять $PDO переменную?

$pdo = new PDO('sqlite:myDatabase.sqlite3');



if( isset($_POST['NoteUpdateText'])  && !empty(trim($_POST['NoteUpdateText'])) ){

  //$testo = $_POST['NoteUpdateText'];

 try {

   $stmt = $PDO->prepare('UPDATE ajax SET testo = :testo WHERE id = :id');
   if ($stmt->execute(array(':testo'=>$_POST['NoteUpdateText'], ':id' => 1)))
   {

     // echo a message to say the UPDATE succeeded
     //echo $stmt->rowCount() . " records UPDATED successfully";
   } else {
     // There's error processing updates
     // debug
     print_r($stmt->errorInfo());
   }
  } catch(PDOException $e) {
    echo $sql . "<br>" . $e->getMessage();
  }
}

// In EVERY case, load the actual DB record and return it to javascript

// There's no need to redeclare $PDO 
// $PDO = new PDO('sqlite:myDatabase.sqlite3');  // --- ISSUE, theoretically this is already opened at line #3 ---

  try {
    $stmt = $pdo->prepare("SELECT testo FROM ajax WHERE id=1 LIMIT 1"); // line #34
   $stmt->execute(); 
   $row = $stmt->fetch();
   //var_dump($row);
   echo $row["testo"];
 } catch(PDOException $e) {
   echo $sql . "<br>" . $e->getMessage();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...