doulei6778 2017-06-11 16:03
浏览 42
已采纳

PDO准备的声明与动态变量[重复]

This question already has an answer here:

I want to create a function that can insert data into database using PDO prepared statement

public function test() {
  $this->insert([
    'first_name' => $_POST['first_name'],
    'last_name' => $_POST['last_name'],
    'email' => $_POST['email']
  ]);
}


public function insert(array $data) {

  $fields = '';
  $bindValues = '';
  $values = [];

  foreach($data as $k => $v) {
    $fields .= $k . ', ';
    $bindValues .= ':' . $k . ', ';
    $values[$k] = $v; 
  }

  $fields = rtrim($fields, ', ');
  $bindValues = rtrim($bindValues, ', ');

  $insert = $this->db->prepare("
    INSERT INTO
      :table
    (:fields)
    VALUES 
      (:values)
  ");

  $insert->execute([
    'table' => $this->table,
    $values
  ]);  
}

dumped variables: 
1. $fields
2. $bindValues 
3. $values


'first_name, last_name, email' (length=28)
':first_name, :last_name, :email' (length=31)
array (size=3)
  'first_name' => string 'Nikola' (length=6)
  'last_name' => string 'Misic' (length=5)
  'email' => string 'mail@mail.com' (length=13)

And I'm getting an error

Call to a member function execute() on boolean

There's something wrong with the SQL, and I don't know what or how to debug it.

</div>
  • 写回答

1条回答 默认 最新

  • duanmi4379 2017-06-11 16:07
    关注

    You need to build the SQL using something like...

    $insert = $this->db->prepare("
        INSERT INTO
          {$this->table}
        ($fields)
        VALUES 
          ($bindValues)
      ");
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值