•所以我试图改变我的编码习惯,并希望至少阻止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())
,它会导致我的错误吗?
我相信我问了太多问题,有什么好的参考资料,我可以在这里找到大部分答案吗?
提前致谢。
答案 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 ...”等等等等等所述