2014-12-05 212 views
-1

我正在學習有關PHP準備語句並在使用MySQL INSERT命令時執行它們。我能夠在沒有準備好的語句的情況下做到這一點,但是在添加準備好的語句之後,我對代碼出錯的地方感到困惑。PHP MySQLInsert預準備語句

下面的代碼給了我「內部服務器錯誤」,但它似乎在語法上是正確的。

編輯:

這裏是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 2014-12-05 02:03:21

+0

查看您的錯誤日誌和/或激活明確的錯誤報告。 「內部服務器錯誤」根本沒有任何幫助,您需要從PHP獲取詳細的錯誤消息。 – deceze 2014-12-05 02:04:17

+0

我正在從dbConnect初始化$ link。我已經更新了我的原始問題以包含來自dbConnect的代碼。 – RoyaleWCheese1 2014-12-05 02:09:35

回答

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中期望的日期時間爲date('Y-m-d H:i:s')(第一年)

+0

是的,這不會打破它,它只是插入'0000-00-00 00:00:00'作爲日期 – Andras 2014-12-05 02:28:15

0
  1. 你的數據庫連接$link,但你使用$mysqli->prepare(..)。這是什麼?
  2. 您是​​ing $stmt,但您還可以使用mysqli_query()。這是無稽之談。使用一個或另一個,而不是兩個。
  3. mysqli_query()需要一個查詢字符串,但是您要給它一個準備好的語句對象。
  4. 您正在將$submitTime綁定到聲明,這是一個DateTime對象,mysqli可能不會喜歡。你永遠不會在任何地方使用格式化日期$submitTimeString

其中任何一個錯誤都可能引發致命錯誤。你需要從頭開始重寫。 Read the manual關於如何使用mysqli擴展。

0

是$ submitTime在綁定到$ stmt時定義的嗎? 綁定後,$ article和$ submitTime都被初始化。 而且你應該綁定日期字符串,而不是DateTime對象。