Php 使用已准备好的语句,但未转义或删除引号
我在将一些东西插入数据库时遇到问题。如果我在文本字段中输入单引号或双引号,它将中断查询,并且不会转义它们。我刚刚读到,使用预先准备好的语句就不需要调用mysql\u real\u escape\u string了。有人能告诉我我的查询是否执行错误吗Php 使用已准备好的语句,但未转义或删除引号,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我在将一些东西插入数据库时遇到问题。如果我在文本字段中输入单引号或双引号,它将中断查询,并且不会转义它们。我刚刚读到,使用预先准备好的语句就不需要调用mysql\u real\u escape\u string了。有人能告诉我我的查询是否执行错误吗$companyInfo是一个包含大约8行要插入的数组 function InsertCompanyInfo($companyInfo, $conn) { foreach($companyInfo as $key => $table) {
$companyInfo
是一个包含大约8行要插入的数组
function InsertCompanyInfo($companyInfo, $conn) {
foreach($companyInfo as $key => $table) {
$keys = array_keys($table);
$values = null;
$x = 1;
foreach($table as $row => $value) {
$values .= "'$value'";
if($x < count($keys)) {
$values .= ', ';
}
$x++;
}
$sql = $conn->prepare("INSERT INTO {$key} (`" . implode('`, `', $keys) . "`) VALUES ({$values});");
$sql->execute();
$CompanyID = $conn->lastInsertId('CompanyID');
}
return $CompanyID;
}
准备好的语句通过在代码中分离查询结构和值来工作,如下所示: 这是查询结构,数据库首先要理解它。然后分别给它赋值:
$stmt->execute(array('baz'));
相反,您要做的是在一个包含粗略插值的完全格式查询上调用
prepare
。这里没有准备
可以做的事情。转义值的整个问题是,数据库无法确定值是什么以及查询的哪一部分是在这个事实之后。如果您将查询完全格式化并错误地转义到数据库中,它将无法神奇地识别应该是什么。您需要在查询中添加占位符,并在单独的步骤中提供相应的值。这不是使用预处理语句的方式。您希望在查询中使用占位符(?
),而不是直接连接内爆结果。请再次阅读如何使用准备好的语句
$stmt = $pdo->prepare('INSERT INTO foo (bar) VALUES (?)');
$stmt->execute(array('baz'));