有人可以帮助我了解为什么此代码实际上有效吗?

时间:2019-04-05 06:38:18

标签: php

我一直在遵循Laracasts“ PHP Practitioner”系列以帮助我基本了解PHP,目前,我的代码可以正常工作并且不会返回任何错误,但是我不太了解它是如何实现的确实有效。

如果您在Episode 20的QueryBuilder.php文件中观看了该系列,我们将创建一个带有2个参数“ $ table”和“ $ parameters”的insert方法。我知道为什么将“ $ table”分配给add-name.php文件中的“ users”表时有效,但是表单中的文本如何通过$ parameters参数提交给数据库?我没有很好地遵循逻辑,我只想完全了解这里发生的事情。

对于那些还没看完电视剧又不知道我在说什么的人,我们基本上制作了一个带有输入和提交按钮的简单表格,这时,我们将从形成一个数据库。这是QueryBuilder.php文件中的代码片段:

public function insert($table, $parameters)
    {
        $sql = sprintf(
         'INSERT INTO %s(%s) values (%s)', 
         $table, 
         implode(', ', array_keys($parameters)),
         ':' .implode(', :', array_keys($parameters))
        );

        try{
        $statement = $this->pdo->prepare($sql);
        $statement->execute($parameters);

    } catch (Exception $e){
            die($e->getMessage());
        }
    }

这是add-name.php文件:

<?php

$app['database']->insert('users', [
    'name' => $_POST['name']
]);

header('Location: /laracasts/PHP');

1 个答案:

答案 0 :(得分:1)

请看看这个https://www.php.net/manual/en/book.pdo.php

PDO的工作方式允许您定义查询结构,然后向其中添加值。这样做是为了拒绝SQL注入。

$statement = $this->pdo->prepare($sql);
$statement->execute($parameters);

在第一行中,您正在准备定义的查询,告诉PDO您要运行哪种查询。 在第二行中,您实际运行它,将您的参数绑定到查询。