Php 如何将连接对象传递给闭包

Php 如何将连接对象传递给闭包,php,mysql,Php,Mysql,我有以下代码来转义已发布的数据: if (isset($_POST['submitted'])) { $trimmed_post = array_map('trim', $_POST); $bk = mysqli_real_escape_string($dbc, $trimmed_post['bk_id']); $ad = mysqli_real_escape_string($dbc, $trimmed_post['address']); $ti = mysql

我有以下代码来转义已发布的数据:

if (isset($_POST['submitted'])) {
    $trimmed_post = array_map('trim', $_POST);

    $bk = mysqli_real_escape_string($dbc, $trimmed_post['bk_id']);
    $ad = mysqli_real_escape_string($dbc, $trimmed_post['address']);
    $ti = mysqli_real_escape_string($dbc, $trimmed_post['bkTitle']);
    $ta = mysqli_real_escape_string($dbc, $trimmed_post['tags']);
    $de = mysqli_real_escape_string($dbc, $trimmed_post['description']);
但我更愿意这样做——这样更整洁:

list($bk, $ad, $ti, $ta, $de) = array_map(function ($x) {
    return mysqli_real_escape_string($dbc, $x);
}, $trimmed_post);
我使用的是MySql 5.5.16,但它返回“Undefined variable:dbc”


我怀疑这是一个“关闭”问题。如何将$dbc传递到lambda pl中?

您可以使用
use
关键字

list($bk, $ad, $ti, $ta, $de) = array_map(function ($x) use ($dbc) {
    return mysqli_real_escape_string($dbc, $x);
}, $trimmed_post);

但是老实说,你应该使用

你最好使用我不知道的“使用”,谢谢。我赞赏对准备好的发言的评论,尽管我不认为这与我的问题有什么关系。特别是“使用准备好的语句并不总是执行语句的最有效方式。只执行一次准备好的语句比未准备好的语句会导致更多的客户机-服务器往返。这就是为什么SELECT不能作为上述准备好的语句运行。”啊。。我看到一个事先准备好的陈述会让我摆脱角色的束缚。但是,考虑到我只运行了一次查询,我对我目前的方法很满意(请参阅我之前评论中的引用)。准备好的语句也是避免SQL注入的安全措施。此外,如果您使用的是准备好的语句,那么您的代码将比现在简单得多,因为它没有转义逻辑。