Вставка объекта данных PHP не выполняется

Моя PHP-форма, которую я просто изменил, чтобы использовать PDO. Единственное, что я могу сказать, это выполнение не работает. Я должен что-то передать с этим?

$db = new PDO('mysql:host=localhost;dbname=x;charset=utf8', 'x', 'x'); if ( !$db ) { die('Could not connect: ' . mysql_error()); } $ipaddress = $_SERVER['REMOTE_ADDR']; $mail = $_POST['mail']; $stmt = $db->prepare("SELECT * FROM ucm_signup WHERE email =? "); $stmt->bindValue(1, $mail, PDO::PARAM_STR); $stmt->execute(); if($stmt->rowCount()== 0) { //if there are no duplicates...insert $sql = $db->prepare("INSERT INTO ucm_signup (company, address1, address2, city, province, zip, fname, lname, email, phone, session, iama, buyfrom, group1, ipaddress) VALUES (:company, :address1, :address2, :city, :province, :zip, :fname, :lname, :mail, :phone, :session, :iama, :buyfrom, :group1, :ipaddress)"); $sql->bindParam(":company", $_POST['company'],PDO::PARAM_STR); $sql->bindParam(":address1", $_POST['address1'],PDO::PARAM_STR); $sql->bindParam(":city", $_POST['city'],PDO::PARAM_STR); $sql->bindParam(":province", $_POST['province'],PDO::PARAM_STR); $sql->bindParam(":zip", $_POST['zip'],PDO::PARAM_STR); $sql->bindParam(":fname", $_POST['fname'],PDO::PARAM_STR); $sql->bindParam(":lname", $_POST['lname'],PDO::PARAM_STR); $sql->bindParam(":email", $_POST['email'],PDO::PARAM_STR); $sql->bindParam(":phone", $_POST['phone'],PDO::PARAM_STR); $sql->bindParam(":session", $_POST['session'],PDO::PARAM_STR); $sql->bindParam(":imea", $_POST['imea'],PDO::PARAM_STR); $sql->bindParam(":buyfrom", $_POST['buyfrom'],PDO::PARAM_STR); $sql->bindParam(":imea", $_POST['imea'],PDO::PARAM_STR); $sql->bindParam(":group1", $_POST['group1'],PDO::PARAM_STR); $sql->bindParam(":ipaddress", $_POST['ipaddress'],PDO::PARAM_STR); $sql->execute(); } 

В моей таблице базы данных нет записей. спасибо

Вам не хватает какого-либо заполнителя в параметрах привязки, тщательно проверьте их

 $sql->bindParam(":address1", $_POST['address1'],PDO::PARAM_STR); $sql->bindParam(":address2", $_POST['city'],PDO::PARAM_STR); //address2 was missed, probably error is column doesn't match values $sql->bindParam(":email", $_POST['email'],PDO::PARAM_STR); //supposed to be mail $sql->bindParam(":imea", $_POST['imea'],PDO::PARAM_STR); //supposed to be iama 

Возможно, вы захотите проверить pdo errors , вот пример, взятый из руководства

 $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Если этот атрибут правильно добавлен, pdo уведомит вас, если возникнет какая-либо ошибка

Пользователи PHP – это пользователи PHP.

Сначала они работают на СТЕНЕ кода, состоит из постоянно повторяющихся почти сотен переменных.
Затем они полностью теряются.

Хотя все может быть сделано с коротким и сжатым кодом, записывая каждое имя поля только ONCE

 $allowed = array('company', 'address1', 'address2', 'city', 'province', 'zip', 'fname', 'lname', 'email', 'phone', 'session', 'iama', 'buyfrom', 'group1', 'ipaddress'); $_POST['ipaddress'] = $_SERVER['REMOTE_ADDR']; $sql = "INSERT INTO ucm_signup SET ".pdoSet($allowed, $values); $stm = $dbh->prepare($sql); $stm->execute($values); 

где вспомогательная функция pdoSet() может быть сохранена в другом месте и повторно использована для каждого запроса на вставку или обновление

 function pdoSet($fields, &$values, $source = array()) { $set = ''; $values = array(); if (!$source) $source = &$_POST; foreach ($fields as $field) { if (isset($source[$field])) { $set.="`".str_replace("`","``",$field)."`". "=:$field, "; $values[$field] = $source[$field]; } } return substr($set, 0, -2); }