2013-08-28 83 views
1

我想在PHP中使用SQLite3將數據添加到數據庫中。我沒有準備好聲明就開始工作,但現在我試圖讓它更安全。我沒有使用PDO。在SQLite3和PHP中使用預準備語句

到目前爲止,下面的代碼不起作用。它只是插入的話「:name」和「:電子郵件」到數據庫中,而不是他們的界限值應該是多少:

$smt = $db->prepare("insert into names (name, email) values (':name', ':email')"); 
$smt->bindValue(':name', $var_name); 
$smt->bindValue(':email', $var_email); 

$var_name = ($_POST[post_name]); 
$var_email = ($_POST[post_email]); 

$smt->execute(); 

於是我開始還以爲這是因爲我身邊有:name單引號和:email在準備的聲明。所以我把這些拿出來了。現在,當我發帖的形式,它只是把空白項到數據庫中,它不插入值的$var_name$var_email

執行該語句,它只是不具約束力的變量正確我不認爲。我做錯了什麼?

+0

也許,添加一種數據將有助於:SQLITE3_TEXT?雖然,它是可選的。 http://www.php.net/manual/en/sqlite3stmt.bindvalue.php – user4035

+0

是的,我忘了提及,我也試過,謝謝 –

回答

5

您設法混淆了綁定函數。

這是必須使用bindParam如果您還沒有指定您的變量。
雖然bindValue只能與現有值一起使用。

此外,你應該把錯誤ON

+0

哦,等待,執行時只接受參數,當使用PDO,我說在我的問題是我沒有使用PDO ..我怎樣才能讓它在沒有PDO的情況下工作? –

+1

好吧,然後閱讀上述功能描述並正確使用它們 –

2

你並不需要中間變量的報告,你必須這樣做:

$smt = $db->prepare("insert into names (name, email) values (':name', ':email')"); 
$smt->bindValue(':name', $_POST['post_name'], SQLITE3_TEXT); 
$smt->bindValue(':email', $_POST['post_email'], SQLITE3_TEXT); 

$smt->execute(); 

由於記錄在SQLite3Stmt::bindValue()值瞬間綁定,而不是作爲SQLite3Stmt::bindParam()在​​時間獲取變量的值。所以問題是執行語句時變量是空的。


記住:

  • 你並不需要在變量賦值加括號:$ a =($ b)條; - > $ a = $ b;
  • 您必須引用可變的密鑰名稱。否則,PHP將嘗試尋找一個帶有這個名字的常量,如果它不存在,將會發出警告,但如果它存在,將會分配一個錯誤的鍵值! $_POST[post_name] - >$_POST['post_name']