使用PDO插入值

时间:2016-03-23 18:24:05

标签: php mysql pdo

•所以我试图改变我的编码习惯,并希望至少阻止SQL注入。但是,我仍然对创建查询时的参数或语法感到困惑。例如,

$q = //LINE 1 "insert into tblProject(projectName, projectLocation, projectType, projectStatus) //LINE 2 values(:projectName, :projectLocation, :projectType, :projectStatus);";

我认为第一行是指数据库中的列名,但在LINE 2中,':'表示什么以及它做了什么?values()引用中的值在哪里? ?它是否引用我声明的变量,例如$projectName = $_POST['projectName'];。它是指$ projectName还是$_POST['projectName']中的值?

•另一个问题是...->execute(array(...)); 我们以此代码为例:

$results = $query->execute(array(
":projectName"      => $projectName,
":projectLocation"  => $projectLocation,
":projectType"      => $projectType,
":projectStatus"    => $projectStatus
));

你能简单解释一下,但确切地解释它的作用吗? 而且,:projectName等等在哪里。来自或来自哪里?

•它使用数组()。因此,如果我只更新或插入单个值并使用execute(array()),它会导致我的错误吗?

我相信我问了太多问题,有什么好的参考资料,我可以在这里找到大部分答案吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

你问题的两个部分是一样的。带冒号的名称是指定绑定名称的方式。当您使用bindValue / bindParam或execute时,您说“this:参数实际上是此值”。因此,您需要查询:

$q =  "insert into tblProject(projectName, projectLocation, projectType, projectStatus) 
   values(:projectName, :projectLocation, :projectType, :projectStatus);";

然后用这个执行它:

$results = $query->execute(array(
":projectName"      => $projectName,
":projectLocation"  => $projectLocation,
":projectType"      => $projectType,
":projectStatus"    => $projectStatus
)); 

驱动程序将通过并说“好的,所以$ projectName的值需要被转义并用于代替查询中的:projectName,而$ projectLocation应该是:projectLocation ...”等等等等等所述