OK這裏的問題:製作使用str_replace函數多個替換在PHP
我試圖寫在我的項目數據庫類的查詢功能,我想更容易逃脫SQL並檢查它是否反正對數據庫有害。
比方說,我有這樣的查詢:
INSERT INTO users (id,name,email,username,birthdate)
VALUES(1,'Josh','[email protected]','josh101','1978-11-02')
但它不會真正幫助如果我硬編碼到函數這一點。所以我們可以說我爲所有想插入的值使用了一個問號,然後將一個數組傳遞給包含我想要替換的實際值的函數,就像它在codeigniter中所做的那樣。
這裏有一個例子:
//Here's the way the function appears in the class definition.
public function query($sql,$params=array()){
if (!empty($params) && is_string($sql)):
//do some stuff here.
elseif (empty($params) && is_string($sql)):
//do some other stuff here.
else:
//bad sql argument.
die("Mysql_database ERROR: The query submitted is not a string!");
endif;
}
//Here's where the function is applied.
$sql="INSERT INTO users (id,name,email,username,birthdate)
VALUES(?,?,?,?,?)";
$params=array(1,'Josh','[email protected]','josh101','1978-11-02');
$db= new Mysql_database();
$response=$db->query($sql,$params);
現在,這裏就是我想要做的:
- 如果沒有提供第二個參數,只需運行查詢,因爲它是。
- 否則請檢查爲其類型提供的數組元素並正確轉義它們,然後將它們替換爲提供的僞sql字符串中的適當位置。
的問題是,它似乎所有的問號得到由只有數組的第一個元素替換:
下面的代碼:
/*assuming I already have a function called create_array that well,
basically creates an array with n elements
specified in the first parameter and fills each element with the value provided in
the second parameter.*/
$toreplace = create_array(substr_count($sql, "?"),"?");
$sqlComplete = str_replace($toreplace, $params, $sql);
如果我回聲$ sqlComplete我得到這個:
INSERT INTO users (id,name,email,username,birthdate)
VALUES(1,1,1,1,1)
我該怎麼做才能讓$ params的每個元素都放在sql字符串的適當位置? PS:請不要告訴我只是使用codeigniter,因爲我試圖通過從頭開始構建項目來挑戰自己,我不想總是依賴框架來完成工作。
謝謝,我不知道任何關於準備好的陳述,我想知道如何使用它們會有很大幫助,所以我一定會閱讀。 :) – ninjacoder