Оператор PDO не вставляется в базу данных

Привет, у меня есть этот код, который не будет работать. Я глючу с ним около часа и не могу найти никаких ошибок, я не знаю, что это такое. Может быть, кто-то мог бы помочь мне здесь.

Вставка скрипта:

    <?php error_reporting(E_ALL); ini_set('display_errors',1);
require('connect.php');

$sql = "INSERT INTO products (name, description, price, url, category, artwork) VALUES ('john', 'john', 'john', 'john', 'john', 'john')";
if ($link->query($sql)) {
  echo "<script>
  alert('Data was added.');
  window.location.href='dashboard.php';
  </script>";
}
else {
  echo "<script>
  alert('Data was not added.');
  window.location.href='dashboard.php';
  </script>";
}
 ?>

Я пытаюсь добавить данные в свою базу данных, но она просто не добавит данные, которые я ей дал.

Вот мой скрипт подключения:

    <?php

try {
  $dbhost = 'localhost';
  $dbuser = 'root';
  $dbpass = '';
  $link = new PDO("mysql:host=$dbhost;dbname=dbtesttest;",$dbuser,$dbpass);

} catch (PDOException $e) {
  echo "Failed :" . $e->getMessage() . "\n";
}

?>

Кто-нибудь понял, что я делаю неправильно? Помимо использования предупреждений в php. Это не дает мне никаких ошибок, у меня есть база данных, созданная с фактическими атрибутами. Мне нужна помощь :(


person pediwan    schedule 21.02.2017    source источник
comment
Вы проверили, что запрос работает? Первое, что приходит на ум, это вставить строку в числовое поле (цена -> 'джон')   -  person nvisser    schedule 22.02.2017
comment
Попробуйте использовать подготовленные операторы и выполните свой запрос после подготовки. Подробнее здесь php.net/manual/en/pdo.prepared-statements.php< /а>   -  person Grynets    schedule 22.02.2017
comment
Что значит не будет работать? У вас есть оператор if/then/else -- какая из ветвей кода выполняется?   -  person miken32    schedule 22.02.2017


Ответы (2)


Попробуем упростить вопрос. Не похоже, что вы возвращаете соединение с базой данных. Чтобы вы могли лучше понять, мы можем вызвать базу данных из того же скрипта (мы можем переместить ее после того, как вы заработаете, потому что мы все любим рефакторинг, не так ли?)

try {
  $dbhost = 'localhost';
  $dbuser = 'root';
  $dbpass = '';
  $link = new PDO("mysql:host=$dbhost;dbname=dbtesttest;",$dbuser,$dbpass);

//устанавливаем атрибут соединения в блоке try

 $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


} catch (PDOException $e) {
  echo "Failed :" . $e->getMessage() . "\n";
}

затем измените эту строку

$link->query($sql)

to

$stmt = $link->prepare($sql);
$stmt->execute();

Все вышеперечисленное должно быть в вашем блоке try, и вставка должна работать, иначе она вернет более подробную ошибку. Надеюсь, это заставит вас двигаться дальше и поможет вам разобраться в этом. Эта ссылка содержит хорошее руководство по CRUD-операции php/mysql.

person eddyizm    schedule 21.02.2017
comment
Что не так с вызовом $link->query напрямую? Как вы думаете, почему подготовка заявления поможет? - person miken32; 22.02.2017
comment
Я не думаю, что это неправильно, но для ОП это должно помочь ему понять, что происходит, и, надеюсь, лучше понять операции. Я считаю, что это также лучше читается при написании операторов вставки/обновления/удаления, в отличие от выбора, с которым часто ассоциируется запрос. Эта ссылка объясняет разницу в деталях. - person eddyizm; 22.02.2017
comment
Ответы должны отвечать на вопрос, а не устранять неполадки или улучшать чтение. Когда у вас будет немного больше представителей, вы сможете комментировать вопросы, чтобы получить разъяснения или внести предложения по отладке. - person miken32; 22.02.2017

Я думаю, вам следует использовать $link->exec($sql);

person user3407931    schedule 21.02.2017
comment
Почему вы так думаете? Предоставьте что-то большее, чем мимолетный комментарий, ничем не подкрепленный. - person miken32; 22.02.2017