PHP Sqlite和PDO插入

PHP Sqlite和PDO插入,php,sql,sqlite,insert,pdo,Php,Sql,Sqlite,Insert,Pdo,我正在用SQLite和PHP在我的Mac上开发一个简单的金钱追踪web应用程序。我在使用insert语句中的参数将数据插入sqlite db时遇到问题。这不是权限问题,因为我已经能够编写静态insert语句,并且它可以正确执行。这是我的密码: try { $databaseins = new PDO("sqlite:/datastores/trackmoney.db") or die("Could not open database"); $databaseins->setAttrib

我正在用SQLite和PHP在我的Mac上开发一个简单的金钱追踪web应用程序。我在使用insert语句中的参数将数据插入sqlite db时遇到问题。这不是权限问题,因为我已经能够编写静态insert语句,并且它可以正确执行。这是我的密码:

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 
}
试试看
{
$databaseins=new-PDO(“sqlite:/datastores/trackmoney.db”)或die(“无法打开数据库”);
$databaseins->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$sql=“插入到事务中”
(交易ID、交易名称、费用、说明、交易日期、输入日期、记录人)
值(:TransactionID,:TransactionName,:Expense,:Description,:TransactionDate,:DateEntered,:RecordedBy);“;
//下面是一个可以工作的静态插入
//$sql=“在事务(TransactionID、TransactionName、费用、描述、TransactionDate、DateEntered、RecordedBy)中插入值(“$guidTransactionID”、“Test”、“12.12”、“Test”、“2012年3月2日”、“2012年12月12日”、“1”);”;
$q=$databaseins->prepare($sql);
$q->bindParam(':TransactionID',$guidTransactionID,SQLITE3_TEXT);
$q->bindParam(':TransactionName',$strTransName,SQLITE3_TEXT);
$q->bindParam(':Expense',$flttransmount,SQLITE3\u FLOAT);
$q->bindParam(':Description',$strtransdescripp,SQLITE3_BLOB);
$q->bindParam(':TransactionDate',$strDateOfTrans,SQLITE3_TEXT);
$q->bindParam(“:DateEntered”,“1/1/2013”,SQLITE3_TEXT);
$q->bindParam(':RecordedBy',1,SQLITE3_整数);
$count=$q->execute()或die($databaseins->errorInfo());
打印(“+$count+”);
$databaseins=null;
}
捕获(PDO$e)
{
echo$e->getMessage();//如果有异常,此getMessage将引发异常
}
我没有收到任何错误消息。请注意,所有变量的值都已设置并具有一个值


感谢您的帮助。

感谢andrewsi和JvdBerg的帮助。解决我的问题的方法是使用bindValue而不是bindParam,并将SQLITE3_BLOB更改为SQLITE3_TEXT

您是否需要使用
bindValue
,而不是
bindParam
?如果更改SQLITE3\u文本的SQLITE3\u BLOB会怎么样?您都是对的。我改为bindValue,将SQLITE3_BLOB改为SQLITE3_文本,现在一切都很好!感谢