我正在尝试创建一个函数来创建一个sql语句来将数据插入到数据库中,这是一个片段。它工作正常,除了最后一个foreach循环。由于某种原因,它不会迭代到数组中的最后一个元素,它将一直停留在倒数第二个元素上。问题是第一个foreach循环是相同的代码,它工作正常,但第二个是给我带来麻烦。
*注意:foreach循环中的if语句应该捕获数组中的最后一个元素,并确保未插入“,”。这就是问题所在。如果我从第二个循环中取出if语句,循环将迭代到最后一个元素,但如果没有if块,它会在末尾放置一个逗号并产生SQL语法错误。
第一个循环的输出
INSERT INTO gardyloo.users (joe,bob,joe@hotmail.com,8de,154927,2014-12-18,2014-12-18 7:02:11)
第二个循环的输出,如果
VALUES (:firstName,:lastName,:emailAddress,:password,:userid,:date_joined,:timestamp,)
使用if
输出第二个循环VALUES (:firstName,:lastName,:emailAddress,:password,:userid,:date_joined)
foreach( $values as $a => $b ){
if(next($values) == null){
$sql .= $b."";
break;
}
$sql .= $b.",";
}
$sql .= ") ";
$sql .= "VALUES (";
foreach( $values as $a => $b ){
if(next($values) == null){
$sql .= ":".$a;
break;
}
$sql .= ":".$a.",";
}
$sql .= ")";
*编辑,此代码似乎工作正常:
$sql .= implode(', ', array_keys($values));
$sql .= ") ";
$sql .= "VALUES (:";
$sql .= implode(", :", array_keys($values));
$sql .= ")";
答案 0 :(得分:0)
而不是休息,你需要继续使用; Break中断循环,而continue只移动到下一次迭代。
试试这个:
foreach( $values as $a => $b ){
if($b == null){
continue;
}
$sql .= ":".$a.",";
}
答案 1 :(得分:0)
做这样的事情:
//Your data
$values = array(
'firstName' => 'Joe',
'lastName' => 'bob',
'emailAddress' => 'joe@hotmail.com',
'password' => '8de',
'userid' => 154927,
'date_joined' => '2014-12-18',
'timestamp' => '2014-12-18 7:02:11'
);
//Begins the sentence
$sql = 'INSERT INTO gardyloo.users(';
/**
* Begins example code.
* - array_keys shows the key as a value
* example: $values[0] = firstName
*/
foreach(array_keys($values) as $k => $v)
{
//when the array arrives at the end, doesn't show ','
if($k != count($values)-1)
$sql .= $v.",";
else
$sql .= $v;
}
$sql .= ") ";
$sql .= "VALUES (";
$k = 0;//the new count initialized
foreach($values as $v)
{
//when the array arrives at the end, doesn't show ','
if($k != count($values)-1)
$sql .= $v.",";
else
$sql .= $v;
//increments the counter
$k++;
}
$sql .= ");";
备注:强>
答案 2 :(得分:0)
否则我会这样做。而不是concat字符串$sql
创建2个变量,$ columns和$ values,两者都是数组。并且您不需要循环来执行此操作。
所以我会这样做:
$columns = array_keys($values);
$sql = "INSERT INTO table (". implode(" ,", $columns) . ") VALUES (". implode(" ,", $values);
在这里你不需要测试它是否是数组的最后一个元素break;
希望它有所帮助;)