0

господа! с pdo никогда не работал, прошу помочь понять структуру и порядок запроса, потому что на текущий момент ничего записать в бд не получается, а ошибок как таковых не высвечивается.

первый кусок кода

require_once( "databaseconnection.php" );

if (!$dbh) { echo "error"; } else { echo "connection successfull . <br />"; }

$data = $_POST;

var_dump($data);

здесь я проверяю соединение с бд (успешно). затем присваиваю переменной $data массив из 21 элемента (он же отображается при обращении к исполняемому файлу.

затем я готовлю запрос в переменную sql с плейсхолдерами.

$sql = "INSERT INTO contract (fullname, shortname, inn, kpp, ogrn, okpo, director, position, post, f-address, y-address, n-contract, d-contract, bik, paymentaccount, correspondentaccount, bank, tel, email, manager, party) 
VALUES (:fullname, :shortname, :inn, :kpp, :ogrn, :okpo, :director, :position, :cause, :fact, :yur, :numbercontract, :datecontract, :bik, :paymentaccount, :correspondentaccount, :bank, :tel, :email, :manager, :party)";

дальше - проблемы. я двумя вариантами (как нагуглил) пытался забиндить плейсхолдеры переменным из $data, а именно я делал так:

$s->bindValue(':party', $data['party']);
$s->bindValue(':fullname', $data['fullname']);
$s->bindValue(':shortname', $data['shortname']);
$s->bindValue(':inn', $data['inn']);
$s->bindValue(':kpp', $data['kpp']);
$s->bindValue(':ogrn', $data['ogrn']);
$s->bindValue(':okpo', $data['okpo']);
$s->bindValue(':yur', $data['yur']);
$s->bindValue(':fact', $data['fact']);
$s->bindValue(':director', $data['director']);
$s->bindValue(':position', $data['position']);
$s->bindValue(':cause', $data['cause']);
$s->bindValue(':numbercontract', $data['numbercontract']);
$s->bindValue(':datecontract', $data['datecontract']);
$s->bindValue(':bik', $data['bik']);
$s->bindValue(':paymentaccount', $data['paymentaccount']);
$s->bindValue(':correspondentaccount', $data['correspondentaccount']);
$s->bindValue(':bank', $data['bank']);
$s->bindValue(':tel', $data['tel']);
$s->bindValue(':email', $data['email']);
$s->bindValue(':manager', $data['manager']);

или второй вариант, как я биндил параметры

$params = [
    ':fullname' => $data['fullname'],
    ':shortname' => $data['shortname'],
    ':inn' => $data['inn'],
    ':kpp' => $data['kpp'],
    ':ogrn' => $data['ogrn'],
    ':okpo' => $data['okpo'],
    ':director' => $data['director'],
    ':position' => $data['position'],
    ':cause' => $data['cause'],
    ':fact' => $data['fact'],
    ':yur' => $data['yur'],
    ':numbercontract' => $data['numbercontract'],
    ':datecontract' => $data['datecontract'],
    ':bik' => $data['bik'],
    ':paymentaccount' => $data['paymentaccount'],
    ':correspondentaccount' => $data['correspondentaccount'],
    ':bank' => $data['bank'],
    ':tel' => $data['tel'],
    ':email' => $data['email'],
    ':manager' => $data['manager'],
    ':party' => $data['party']
];

затем я запускал вот эту конструкцию, насколько понимаю - подготовку к запросу в бд.

$s = $dbh->prepare($sql);

и уже после вызывал сам запрос

$s->execute($params);

вместо $params в случае с bindValue было пусто. Также пробовал методом тыка сувать туда $data, но ничего не происходит.

Как результат я не имею ошибки (или, по крайней мере, я её не вижу). Но база данных - пуста.

Массив $data имеет в себе 21 элемент. Таблица contract состоит из 22 столбцов (первый - id).

  • 2
    настройте pdo в режим исключения при ошибке. Потом смотрите логи – ArchDemon Aug 01 '21 at 14:04
  • 1
    "сувать туда $data" - самый оптимальный вариант. поскольку вся эта писанина на 20 строк становится не нужна – Ипатьев Aug 01 '21 at 14:07
  • @Ипатьев спасибо) – Тимур Жумашев Aug 01 '21 at 14:20
  • 1
    @ArchDemon действительно) включил режим исключения при ошибке и увидел, что если в названии столбцов бд присутствует "-", нужно оборачивать эти столбцы в обратные кавычки столбец. – Тимур Жумашев Aug 01 '21 at 14:21

0 Answers0