【发布时间】:2015-02-16 21:56:23
【问题描述】:
我正在尝试创建一个创建 sql 语句以将数据插入数据库的函数,这是一个 sn-p。除了最后一个 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)
没有if的第二个循环的输出
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 .= ")";
【问题讨论】:
-
你不应该在生产环境中这样做。您正在向SQL Injection 攻击敞开大门。始终使用参数化语句。
-
参数化语句是什么意思?
-
我应该在 $sql .= ")";是 $query = $init->link->prepare($sql);这意味着什么?
-
我对 PHP 不是很熟悉,但基本上,我会推荐以下内容: $query = $init->link->prepare("INSERT INTO gardyloo.users VALUES(?,?, ?,?,?,?,?)");然后,运行一个 for 循环(如果要添加多行,否则没有 for 循环)来运行查询
$query->execute($firstName, $lastName, $emailAddress, $password, $userId, $dateJoined, $timestamp);
标签: php mysql arrays loops foreach