2012-11-18 122 views
0

我無法正常工作。我搜索了這個網站,發現很多關於這個的帖子,但是沒有一篇似乎有效。使用mysqli插入到mysql數據庫時遇到困難

這裏是我的簡單的代碼:

if (isset($_POST['submit'])) 
{ 
$startDate = strtotime($_POST['from']); 
$endDate = strtotime($_POST['to']); 

for($i = $startDate; $i <= $endDate; $i = strtotime('+1 day', $i)) 
{ 
$date = date('Y-m-d',$i); 
//echo $date . "<br>"; 
$sql = ("INSERT INTO `calendar` (`Cal_Date`) VALUES (`$date`)"); 
} 
    if(!$result = $db->query($sql)) 
    { 
    die('There was an error running the query [' . $db->error . ']'); 
    } 

} 

的形式是一樣簡單的日期是在「YYYY-MM-DD」格式輸入。我想要做的是用一系列日期填充我的數據庫表。發生的唯一情況是一行被插入,它是「0000-00-00」,我懷疑這是因爲我已將該列設置爲Date,Not Null。當我回應結果時,一切都完美無缺,只是將它放入db似乎並不奏效。我已經試過INSERT線包括的許多其他組合:

$sql = ("INSERT INTO `calendar` (`Cal_Date`) VALUES (`{$date}`)"); 

$sql = ("INSERT INTO calendar ('Cal_Date') VALUES ($date)"); 

$sql = ("INSERT INTO `calendar` (`Cal_Date`) VALUES (`$date`)"); 

$sql = $db->query("INSERT INTO `calendar` (`Cal_Date`) VALUES (`$date`)"); 

($ DB是db_connect.php)...我想即使其他幾個。我不知道我的db_connect.php被連接到數據庫,因爲我已經有了:

$sql = ("SELECT * FROM calendar"); 

進一步下跌的頁面,它的正常工作。我一直在這麼做太久,我相信我只是錯過了一些明顯的東西。我會很感激你的反饋。

的MySQL 5.5.24 PHP 5.3.13 的Apache 2.2.22

+1

看到這裏http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php –

+0

爲什麼不直接在數據庫中存儲的開始和結束日期,而不是在每一個日期單獨的記錄之間?你確定你想要這個數據結構嗎? – eggyal

+0

@eggyal是的,我確實希望這樣。我正在制定員工工作計劃,我需要所有日期。 –

回答

1

String literals應與單引號'(或雙引號",如果ANSI_QUOTES被禁用)字符,而不是反引號(在MySQL中僅用於引用SQL標識符)。

+0

我確實知道,雖然我明白你爲什麼會認爲我沒有。我一直在嘗試從字面上找到所有可以找到的東西,並且在其他文章中提到了添加這些內容的內容。感謝您的答覆。 –

+0

@ArewrewFox:所以,要清楚,使用字符串引用已解決您的問題? – eggyal

+0

是的,這是正確的。我試過'$ sql =(「INSERT INTO calendar(Cal_Date)VALUES('$ date')」);'並且它也不起作用。 –

2

嘗試沒有`你的價值,並彈回PHP ...在:

$sql = ("INSERT INTO calendar (`Cal_Date`) VALUES (".$date.")"); 

如果這並沒有幫助,回聲SQL並讓我們確切知道內置的SQL是什麼,這將網絡你更快的修復

+0

我完全像你一樣進入,但沒有運氣。我編輯我的帖子,以顯示正在嘗試以及我的服務器,SQL和PHP版本。感謝您的回覆 –

+1

您可以在每種情況下回顯$ sql,以便我們可以看到實際的SQL是什麼,可能更容易確定發生了什麼 – duellsy

+1

INSERT INTO calendar(Cal_Date)VALUES('2012-10 -01')' –

1

首先,沒有必要將您的字符串包裹在圓括號中!

這應該是訣竅!

$sql = "INSERT INTO `calendar` (`Cal_Date`) VALUES ('$date')"; 

一個更美好的但更難理解溶液(引號中的術語):

$sql = 'INSERT INTO `calendar` (`Cal_Date`) VALUES (\''.$date.'\')'; 

這一個應該工作以及:

$sql = "INSERT INTO calendar (Cal_Date) VALUES ('$date')"; 

注:後剔(`)僅用於字段名稱和表名,並且僅當您的表名或字段名中包含空格時才需要!

在SQL中使用單引號或雙引號來分隔字符串,日期,字符,變量以及布爾值,空值和數值的任何值!

希望這有助於!

相關問題