st4*_*l0w 12 php arrays associative-array implode
所以我正在尝试创建一个基于多维数组生成SQL查询字符串的函数.
例:
function createQueryString($arrayToSelect, $table, $conditionalArray) {
$queryStr = "SELECT ".implode(", ", $arrayToSelect)." FROM ".$table." WHERE ";
$queryStr = $queryStr.implode(" AND ",$conditionalArray); /*NEED HELP HERE*/
return $queryStr;
}
$columnsToSelect = array('ID','username');
$table = 'table';
$conditions = array('lastname'=>'doe','zipcode'=>'12345');
echo createQueryString($columnsToSelect, $table, $conditions); /*will result in incorrect SQL syntax*/
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我需要第3行的帮助,因为它正在打印
SELECT ID,用户名FROM表WHERE姓氏和邮政编码
但它应该是打印
SELECT ID,用户名FROM表WHERE lastname ='doe'和zipcode ='12345'
Geo*_*ian 16
你实际上并没有破坏多维数组.$ conditions是一个关联数组.
只需在函数createQueryString()中使用foreach循环.这样的东西应该有用,注意它没有经过测试:
$terms = count($conditionalArray);
foreach ($conditionalArray as $field => $value)
{
$terms--;
$queryStr .= $field . ' = ' . $value;
if ($terms)
{
$queryStr .= ' AND ';
}
}
Run Code Online (Sandbox Code Playgroud)
注意:为了防止SQL注入,应该根据所使用的DB适当/必要地转义和/或引用这些值.不要只是复制和粘贴; 认为!
Mor*_*dur 10
function implodeItem(&$item, $key) // Note the &$item
{
$item = $key . "=" . $item;
}
[...]
$conditionals = array(
"foo" => "bar"
);
array_walk($conditionals, "implodeItem");
implode(' AND ', $conditionals);
Run Code Online (Sandbox Code Playgroud)
未经测试,但这样的事情应该有效.这样您还可以检查$ item是否为数组,并在这些情况下使用IN.
| 归档时间: |
|
| 查看次数: |
29836 次 |
| 最近记录: |