pdo для извлечения данных и заполнения записи

Я уже задал вопрос о том, как пользователь PDO добавляет записи в базу данных PDO , теперь я не могу выбрать данные и вставить их в форму html, чтобы позволить пользователю выбирать и, как следствие, добавлять запись в таблицу db

<?php error_reporting(-1); ini_set('display_errors', 'On'); ?> <?php $servername = "localhost"; $username = "xxx"; $password = "xxx"; $dbname = "xxx"; try { $dbh = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // set the PDO error mode to exception $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo 'Connected to database<br />'; } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); } ?> <?php if ($_GET['action'] == 'edit') { //retrieve the record's information $sth = $dbh->prepare = 'SELECT nome, cognome, indirizzo, civico, citta, prov FROM tagesroma WHERE id = ' . $_GET['id']; $sth = $dbh->execute(); extract($sth = $dbh->fetch()); } else { //set values to blank $nome = ''; $cognome = ''; $indirizzo = ''; $civico = 0; $citta = ''; $prov = ''; } ?> <html> <head> <meta charset="UTF-8"> <title><?php echo ucfirst($_GET['action']); ?> Tages</title> <style type="text/css"> <!-- #error { background-color: #600; border: 1px solid #FF0; color: #FFF; text-align: center; margin: 10px; padding: 10px; } --> </style> </head> <body> <?php if (isset($_GET['error']) && $_GET['error'] != '') { echo '<div id="error">' . $_GET['error'] . '</div>'; } ?> <form action="commit.php?action=<?php echo $_GET['action']; ?>&type=tages" method="post" accept-charset="UTF-8"> <table> <tr> <td>Nome</td> <td><input type="text" name="nome" value="<?php echo $nome; ?>"/></td> </tr><tr> <td>Cognome</td> <td><select name="cognome"></td> <?php //seleziona il tipo di cognome $sth = $dbh->prepare = 'SELECT cognome FROM tagesroma'; $sth->execute(); //popola con i risultati while ($row = $sth->fetch()) { foreach ($dbh->$row as $value) { if ($row['id'] == $cognome) { echo '<option value="' . $row['id'] . '" selected="selected">'; } else { echo '<option value="' . $row['id'] . '">'; } } } ?> </select></td> </tr><tr> <td colspan="2" style="text-align: center;"> <?php if ($_GET['action'] == 'edit') { echo '<input type="hidden" value="' . $_GET['id'] . '" name="id" />'; } ?> <input type="submit" name="submit" value="<?php echo ucfirst($_GET['action']); ?>" /> </td> </tr> </table> </form> </body> </html> 

ошибка, с которой я имею дело, заключается в следующем:

 Fatal error: Call to a member function execute() on a non-object on line 76 

Solutions Collecting From Web of "pdo для извлечения данных и заполнения записи"

Ошибка Call to a member function execute() on a non-object означает, что эта область кода недействительна:

 $sth = $dbh->prepare = 'SELECT nome, cognome, indirizzo, civico, citta, prov FROM tagesroma WHERE id = ' . $_GET['id']; $sth = $dbh->execute(); 

Правильный способ:

 $sth = $dbh->prepare(" SELECT nome, cognome, indirizzo, civico, citta, prov FROM tagesroma WHERE id = ? "); $sth->execute(array($_GET['id'])); 
  • Используйте двойную кавычку, если вы хотите использовать символы новой строки
  • Знайте, что prepare() – это функция, поэтому следовать за ней с = не имеет смысла
  • Уточните свой код для удобочитаемости

Вы не используете подготовленные заявления правильно. попробуй это:

  <?php $id = $_GET['id']; $sth = $dbh->prepare("SELECT nome, cognome, indirizzo, civico, citta, prov FROM tagesroma WHERE id = :id"); $sth->bindParam(":id",$id,PDO::PARAM_INT); $sth->execute(); ?>