所以我正在尝试构建一个函数(修改另一个函数),并且我将该函数发布到该函数中。似乎可以使用我的函数关闭INSERT命令的格式化。我一直在寻找过去的两个小时,无法找到我可能去过的地方。
这是函数,下面是错误代码!
public static function addCompany($toInsert = array()){
self::construct();
if( count($toInsert) == 0 ){
echo "Nothing posted!";
}else {
$keys = array_keys($toInsert);
$columns = implode(",", $keys);
$colVals = implode(",:", $keys);
$sql = self::$dbh->prepare("INSERT INTO companys {$columns} VALUES(:$colVals)");
//$sql->bindValue(":id", $company);
foreach($toInsert as $key => $value){
$value = htmlspecialchars($value);
$sql->bindValue(":$key", $value);
}
$sql->execute();
return true;
}
}
这是阵列进来。
$vname = $_POST["name"];
$vlogo = $_POST["logo"];
$vinfo = $_POST["info"];
$vsite = $_POST["site"];
$vest = $_POST["est"];
$data = array('name' => $vname, 'logo' => $vlogo, 'info' => $vinfo, 'site' => $vsite, 'est' => $vest);
这是错误。
2017/01/07 18:30:22 [错误] 9682#9682:* 3352 FastCGI在stderr中发送:" PHP消息:PHP致命错误:未捕获异常' PDOException' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,使用附近的名称,徽标,信息,网站,评估值(' test',' test', '测试''测试''测试')'在第1行'在/var/www/xxxx/inc/xxxxxxx.php:938
任何帮助都会很棒!
答案 0 :(得分:3)
您的INSERT
查询错误,您错过了封装列名称的括号。见这里,
$sql = self::$dbh->prepare("INSERT INTO companys {$columns} VALUES(:$colVals)");
^^^^^^^^^^
您的查询语句应如下所示:
$sql = self::$dbh->prepare("INSERT INTO companys ({$columns}) VALUES(:$colVals)");