我对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) . '\'';
但我无法得到我想要达到的目标,有人可以帮助我吗?提前谢谢
答案 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);