如何正确使用implode()函数处理关联数组

3
我有一个关于 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) . '\'';

但我无法实现我想要的,有人可以帮我吗?提前感谢。

1
你可以使用普通的 implode($user_data) 来处理你的值,以及 implode(array_keys($user_data)) 来处理你的键。 - ToBe
你的意思是什么?如果我只使用 implode($user_data),我还能达到我想要的目的吗? - Pengun
我不知道你是否试图使用 SQL,但请不要这样做!如果你在做这个,请使用一些 ORM。 - marctrem
@Pengun 试一下。var_dump 两种变量的结果,你就会知道它们分别是什么和如何使用。或者直接复制粘贴其他解决方案之一。我强烈建议玩一下 var_dump,并理解你在做什么。 - ToBe
@ToBe 谢谢,我会记下来的。 - Pengun
2个回答

5

尝试

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

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);

谢谢,但我觉得您的代码对我来说更复杂了,我想学习如何正确使用implode()方法。 - Pengun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接