如何正确使用implode()与关联数组

时间:2014-01-30 15:14:30

标签: php implode

我对php中的implode()有疑问,我有array()

$user_data = array(
    'user_id_num' => $_POST['userid'],
    'fullname' => $_POST['userfname'],
    'username' => $_POST['useruname'],
    'password' => $password_hash
);

我想要实现的就是这样,例如,

表示字段

`user_id_num`,`fullname`,`username`,`password`

和值

'2159','Sample Name','example','mypassword' <- hash password
到目前为止我尝试过的是

$user_fields = '`' . implode('`, `', $user_data) . '`';
$user_data   = '\'' . implode('\', \', $user_data) . '\'';

但我无法得到我想要达到的目标,有人可以帮助我吗?提前谢谢

2 个答案:

答案 0 :(得分:4)

尝试

$user_fields = '`' . implode('`, `', array_keys($user_data)) . '`';
$user_data   = "'" . implode("', '", array_values($user_data)) . "'";

答案 1 :(得分:0)

我不会引用像这样的内爆字符串;虽然它可能有用,但很难阅读并容易出错。正确的做法是正确引用每个条目并仅用逗号破坏结果:

$fields = join(',', array_map(function ($field) { return "`$field`"; }, array_keys($user_data)));
$data   = join(',', array_map(function ($value) { return mysql_real_escape_string($value); }, $user_data));

字段名称由您控制,因此使用反斜杠引用它们就足够了。对于用户提供的数据,您需要通过正确的SQL转义函数运行它或者更好地使用预准备语句。上面演示了使用mysql_扩展的遗留方法,这是您真正不应该做的事情这些天来了。

代码应该更像这样:

$fields = join(',', array_map(function ($field) { return "`$field`"; }, array_keys($user_data)));
$placeholders = join(',', array_map(function ($field) { return ":$field"; }, array_keys($user_data)));

$stmt = $pdo->prepare("INSERT INTO foo ($fields) VALUES ($placeholders)");
$stmt->execute($user_data);