所以我創建了一個簡單的PHP函數,通過更新PHP接收的數組來更新我的MySQL行。這個查詢是過度逃脫的!需要一個簡單的想法
function db_updateproduct(array $new, array $old = array()) {
$diff = array_diff($new, $old);
return 'INSERT INTO table (`'.mysql_real_escape_string(implode(array_keys($diff), '`,`')).'`) VALUES \''.mysql_real_escape_string(implode(array_values($diff), '\',\'')).'\'';
}
...
更新(與接受的答案)
function db_updateproduct(array $new, array $old = array()) {
$diff = array_diff($new, $old);
return 'INSERT INTO `Product` (`'.implode(array_keys($diff), '`,`').'`) VALUES (\''
.implode(array_map('mysql_real_escape_string', array_values($diff)), '\', \'').'\')';
}
現在...
echo db_updateproduct(array('a' => 'on\'e', 'b' => 'two', 'c' => 'three'));
回報:
INSERT INTO `Product` (`a`,`b`,`c`) VALUES ('on\'e', 'two', 'three')
(如預期/希望!)
第一個鏡頭:爲你的查詢字符串「而不是單引號」使用雙引號,在implode中也使用「','」這應該避免混淆轉義序列 – micfra 2012-03-16 11:03:57
我不明白爲什麼。 'implode(array_values($ diff),'\',\'')'我是否丟失了某些東西? – rgin 2012-03-16 11:07:36
** micfra ** :,不幸的是引號仍然會被轉義 – 2012-03-16 11:23:23