我有类似下面的功能:PHP破灭阵列产生在MySQL标准
public function foo ($cities = array('anaheim', 'baker', 'colfax'))
{
$db = global instance of Zend_Db_Adapter_Pdo_Mysql...
$query = 'SELECT name FROM user WHERE city IN ('.implode(',',$cities).')';
$result = $db->fetchAll($query);
}
这工作了罚款,直到有人把$城市作为一个空数组。
要避免这个错误我一直在逻辑打破了查询,像这样:
$query = 'SELECT name FROM user';
if (!empty($cities))
{
$query .= ' WHERE city IN ('.implode(',',$cities).')';
}
但这是不是很优雅。我觉得应该有一个更好的方式来过滤列表,但我不知道如何。有什么建议?
这如果用户提交包含'''(SQL注入一个城市也将打破)或逗号...你需要将它们包装在''s – 2010-10-05 21:24:37
这样做完全没问题。如果没有城市,你不需要'WHERE'子句...... – 2010-10-05 21:25:05
对我来说看起来很好,但是你可以使用很多类中的一个来制作精美的准备好的查询。至少,逃脱你的弦乐! http://php.net/manual/en/function.mysql-real-escape-string.php – Brad 2010-10-05 21:26:23