2017-02-21 6 views
0

Здравствуйте, у меня есть этот код, который не сработает. Я пробовал его около часа и не могу найти никаких ошибок, я не знаю, что это такое. Может быть, кто-то может помочь мне здесь.Заявление 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. Это не дает мне никаких ошибок, у меня есть база данных с фактическими атрибутами. Мне нужна помощь :(

+1

Вы проверили, что запрос работает? Первое, что приходит в голову, это поместить строку в числовое поле (price -> 'john) – nvisser

+0

Попробуйте использовать подготовленные операторы и выполнить свой запрос после подготовки. Подробнее здесь http://php.net/manual/en/pdo.prepared-statements.php – Grynets

+0

Что означает «не будет работать»? У вас есть оператор if/then/else - какая из ветвей кода выполняется? – miken32

ответ

-1

Я думаю, вы должны использовать $ ссылка-> Exec ($ SQL)..

+0

Почему вы так думаете? Предоставьте что-то большее, чем мимолетный комментарий, чтобы ничего не поддержать. – miken32

-1

Давайте попробуем упростить вопрос Это не выглядит, как вы возвращаете подключение к базе данных Так что вы может лучше понять, мы можем назвать дб из того же сценария (мы можем переместить его после того, как вы получите это работает, потому что мы все любим, чтобы реорганизовать не так ли?)

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

// установить атрибут соединения в блок попыток

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


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

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

$link->query($sql) 

в

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

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

+0

Что случилось с вызовом '$ link-> query' напрямую? Почему вы думаете, что подготовка заявления поможет? – miken32

+0

Я не думаю, что это неправильно, но для ОП это должно помочь ему понять, что происходит, и, надеюсь, лучше понять операции. Я считаю, что он также лучше читается при написании инструкций insert/update/delete, а не в выборе, поскольку запрос часто связан с. Эта [ссылка] (http://stackoverflow.com/questions/16381365/difference-between-pdo-query-and-pdo-exec) объясняет разницу в деталях. –

+1

Ответы должны отвечать на вопрос, а не устранять неполадки или делать вещи «лучше прочитанными». После того, как вы получите немного больше отзывов, вы сможете комментировать вопросы, чтобы получить разъяснения или предоставить отладочные предложения. – miken32

Смежные вопросы