2012-09-05 115 views
1

我正在使用SQLite和PHP在我的Mac上開發一個簡單的錢跟蹤web應用程序。我有一個問題插入數據到sqlite數據庫使用插入語句的參數。這不是權限問題,因爲我已經能夠編寫一個靜態插入語句,並且它可以正確執行。這是我的代碼:PHP Sqlite和PDO插入

try 
{ 
$databaseins = new PDO("sqlite:/datastores/trackmoney.db") or die("Could not open database"); 
$databaseins->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$sql = "INSERT INTO Transactions 
    (TransactionID, TransactionName, Expense, Description, TransactionDate, DateEntered, RecordedBy) 
VALUES (:TransactionID,:TransactionName,:Expense,:Description,:TransactionDate,:DateEntered,:RecordedBy);"; 
// below is a static insert that works 
//$sql = "INSERT INTO Transactions (TransactionID, TransactionName, Expense, Description, TransactionDate, DateEntered, RecordedBy) VALUES ('$guidTransactionID','Test',12.12,'test','3/2/2012','12/12/2012',1);"; 
$q = $databaseins->prepare($sql); 
$q->bindParam(':TransactionID', $guidTransactionID, SQLITE3_TEXT); 
$q->bindParam(':TransactionName', $strTransName, SQLITE3_TEXT); 
$q->bindParam(':Expense', $fltTransAmount, SQLITE3_FLOAT); 
$q->bindParam(':Description', $strTransDescrip, SQLITE3_BLOB); 
$q->bindParam(':TransactionDate', $strDateOfTrans, SQLITE3_TEXT); 
$q->bindParam(':DateEntered', "1/1/2013", SQLITE3_TEXT); 
$q->bindParam(':RecordedBy', 1, SQLITE3_INTEGER); 

$count = $q->execute() or die($databaseins->errorInfo()); 
print("<b>" + $count + "</b>"); 
$databaseins = null; 
} 
catch(PDOException $e) 
{ 
echo $e->getMessage();//this getMessage throws an exception if any 
} 

我沒有收到任何錯誤消息。請注意,變量的所有值均已設置並具有一個值。

感謝您的任何幫助。

+2

可能需要使用'bindValue'而不是'bindParam'? – andrewsi

+2

如果更改SQLITE3_TEXT的SQLITE3_BLOB,該怎麼辦? – JvdBerg

+0

你是對的。我更改爲bindValue並將SQLITE3_BLOB更改爲SQLITE3_TEXT,現在一切都很順利!謝謝! – Jeremy

回答

2

感謝andrewsi和JvdBerg的幫助。解決我的問題是使用bindValue而不是bindParam並將SQLITE3_BLOB更改爲SQLITE3_TEXT。