PHP Implode关联数组

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.