2014-12-05 5 views
-1

Я работаю над изучением подготовленных и подготовленных инструкций PHP при использовании команды MySQL INSERT. Я могу сделать это очень хорошо без подготовленных утверждений, но я смущен тем, где я ошибся в своем коде после добавления подготовленных заявлений.PHP MySQLInsert подготовленные заявления

Приведенный ниже код дает мне «Внутреннюю ошибку сервера», но он кажется синтаксически правильным.

EDIT:

Вот dbConnet.php:

<?php 

$hostname = "*";  
$username = "*";     
$database = "*";     
$password = "*"; 


$link = mysqli_connect($hostname, $username, $password, $database); 


if (!$link)          
    { 
     die('Could not connect: ' . mysqli_connect_error());   
    } 
?> 

Код:

<?php 
     include('dbConnect.php'); 

$stmt = $mysqli->prepare("INSERT INTO Articles (content, date) VALUES (?,?)"); 
$stmt->bind_param('si', $article, $submitTime); 

$article = $_POST['articleArea']; 
$submitTime = new DateTime(); 
$submitTimeString = $submitTime->format("m-d-Y H:i:s"); 

$stmt->execute(); 

    if (mysqli_query($link,$stmt)) 
{ 
    echo "<script language='javascript'>alert('Article has been submitted!')</script>"; 
    echo "<script language='javascript'>window.location = 'URL'</script>"; 
} 
else 
{ 
    echo "<script language='javascript'>alert('Uh oh! An error has been encountered! Please try to resubmit your article.')</script>"; 
    echo "<script language='javascript'>window.location = 'URL'</script>"; 
} 

mysqli_close($link); 

?> 

Любое понимание моего вопроса очень ценится. Если вам нужно, чтобы я добавил дополнительную информацию, пожалуйста, дайте мне знать!

Заранее спасибо

+0

где вы инициализируете $ link? – alda1234

+0

Посмотрите на свои журналы ошибок и/или активируйте явное сообщение об ошибках. «Внутренняя ошибка сервера» вообще не помогает, вам нужны подробные сообщения об ошибках с PHP. – deceze

+0

Я инициализирую $ link из dbConnect. Я обновил свой оригинальный вопрос, чтобы включить код из dbConnect. – RoyaleWCheese1

ответ

1

Попробуйте использовать

$stmt = $link->prepare("INSERT INTO Articles (content, date) VALUES (?,?)"); 
    $stmt->bind_param('ss', $article, $submitTimeString); 

    $article = $_POST['articleArea']; 
    $submitTime = new DateTime(); 
    $submitTimeString = $submitTime->format("m-d-Y H:i:s"); 

Вместо

$stmt = $mysqli->prepare("INSERT INTO Articles (content, date) VALUES (?,?)"); 
$stmt->bind_param('si', $article, $submitTime); 

$article = $_POST['articleArea']; 
$submitTime = new DateTime(); 
$submitTimeString = $submitTime->format("m-d-Y H:i:s"); 

Если эта ошибка не вызвана пытается подключиться к базе данных как с $ ссылке и $ MySQLi (как указал deceze) это должен исправить эту проблему. Что касается даты, я бы предложил изменить «дату» на «текстовый» тип данных в вашей базе данных (следовательно, $stmt->bind_param('ss', $article, $submitTimeString); против $stmt->bind_param('si', $article, $submitTimeString);)

-1

формат $submitTimeString неправильно. MySQL ожидает DateTimes как date('Y-m-d H:i:s') (год первый)

+0

да, это не сломает, оно просто вставляет '0000-00-00 00:00:00' в качестве даты – Andras

0
  1. Ваше соединение с базой данных $link, пока вы используете $mysqli->prepare(..). Что он?
  2. Вы - execute(). $stmt, но вы также следуете за использованием mysqli_query(). Это чепуха. Используйте один или другой, а не оба.
  3. mysqli_query() ожидает строка запроса, но вы даете ему подготовленный объект утверждения.
  4. Вы связываете $submitTime с оператором, который представляет собой объект DateTime, который, вероятно, не понравится mysqli. Вы никогда не используете отформатированную дату $submitTimeString в любом месте.

Любая из этих ошибок, вероятно, приведет к фатальной ошибке. Вам нужно переписать это с нуля. Read the manual для использования расширения mysqli.

0

is $ submitTime, определенный в момент привязки к $ stmt? И $ article, и $ submitTime инициализируются после привязки. И вы должны привязать строку даты, а не объект DateTime.

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