通过php函数插入获取错误

时间:2017-01-07 20:29:41

标签: php mysql

所以我正在尝试构建一个函数(修改另一个函数),并且我将该函数发布到该函数中。似乎可以使用我的函数关闭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

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:3)

您的INSERT查询错误,您错过了封装列名称的括号。见这里,

$sql = self::$dbh->prepare("INSERT INTO companys {$columns} VALUES(:$colVals)");
                                                 ^^^^^^^^^^

您的查询语句应如下所示:

$sql = self::$dbh->prepare("INSERT INTO companys ({$columns}) VALUES(:$colVals)");