我正在創建一個自定義類,以使連接和使用mysql更容易。我創建了很多功能,除了一部分外,其他部分都可以正常工作我似乎無法弄清楚如何確定一個字符串是一個實際的字符串,還是如果它是一個mysql函數來引用它或不是。我把一個函數放在一起,我可以傳遞兩個參數,它會插入到數據庫中。第一個參數是要插入的表,而第二個參數是列,值對的數組。也許這個代碼示例會幫助你更多地理解。注意:我已經轉義了所有字符串,並刪除了該代碼以顯示問題的簡單性。MySQL確定是否將單引號括在一個字符串中如果自定義類的MySQL函數
function insert($table,array $array){
$table = "`".$table."`";
$columns = "";
$values = "";
foreach($array as $key => $value){
$columns = ($columns=="") ? "`".$key."`" : $columns.", `".$key."`";
if($value===NULL || $value=="NULL"){
$value = "NULL";
} else {
$value = "'".$value."'";
}
$values = ($values=="") ? "".$value."" : $values.", ".$value."";
}
$query = "INSERT INTO $table ($columns) VALUES ($values)";
return $this->query($query);
}
這裏是兩種不同的用途和預期的結果或每個
$data = array(
"first_name"=>"John",
"last_name"=>"Doe",
"entry_date"=>"2013-08-26"
);
$MyClass->insert("people",$data);
的一個例子將執行
INSERT INTO `people` (`first_name`,`last_name`,`entry_date`) VALUES ('John','Doe','2013-08-26')
其然而預期以下用途:
$data = array(
"first_name"=>"John",
"last_name"=>"Doe",
"entry_date"=>"NOW()"
);
$MyClass->insert("people",$data);
將執行爲
INSERT INTO `people` (`first_name`,`last_name`,`entry_date`) VALUES ('John','Doe','NOW()')
這將無法正常工作,因爲如果MySQL函數帶有引號,將不會運行。我知道這可能是一個小的安全風險,因爲如果沒有發現它會允許用戶的功能。有沒有更好的方法來做到這一點,或者MySQL函數不允許在這樣的類插入函數中使用?如果有一個正則表達式可以幫助查找並允許mysql函數,那麼這可能是一個解決方案。如果再沒有這樣的正則表達式存在一個可能性是從頭寫一個,我一點兒也不太好......
編輯:
,我將在此期間使用另一種解決方案是讓形成數組時PHP的日期。如果可能的話,我想盡可能使用MySQL函數。這是我解決了問題,但不知道如何我更喜歡目前的代碼:
$data = array(
"first_name"=>"John",
"last_name"=>"Doe",
"entry_date"=>date('Y-m-d H:i:s'),
);
$MyClass->insert("people",$data);
'if(preg_match(「/^[A-Z _] + \(。*?\)/」,$ value)){// Mysql function}' – phpisuber01
@ phpisuber01 perfect reg-ex,I [tested] (http://regexpal.com/)它和它完美的作品。如果您想將其轉換爲答案,那麼我會考慮將其作爲所有其他答案中的最佳答案,但到目前爲止,這似乎正在起作用。 – amaster