2014-02-21 123 views
0

我使用jQuery的Blueimp文件上传脚本,并拥有这部分代码这是工作:PHP扩展SQL查询不起作用

protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, 
     $index = null, $content_range = null) { 
    $file = parent::handle_file_upload(
     $uploaded_file, $name, $size, $type, $error, $index, $content_range 
    ); 
    if (empty($file->error)) { 
     $sql = 'INSERT INTO `'.$this->options['db_table'] 
      .'` (`name`, `size`, `type`, `title`, `description`)' 
      .' VALUES (?, ?, ?, ?, ?)'; 
     $query = $this->db->prepare($sql); 
     $query->bind_param(
      'sisss', 
      $file->name, 
      $file->size, 
      $file->type, 
      $file->title, 
      $file->description 
     ); 
     $query->execute(); 
     $file->id = $this->db->insert_id; 
    } 
    return $file; 
}  

现在我想只插入一个值,该值MEMBERID。我用这个列“usr_id”成功扩展了sql表,并修改了这样的代码:

 protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, 
     $index = null, $content_range = null) { 
    $file = parent::handle_file_upload(
     $uploaded_file, $name, $size, $type, $error, $index, $content_range 
    ); 
    if (empty($file->error)) { 
     $sql = 'INSERT INTO `'.$this->options['db_table'] 
      .'` (`name`, `size`, `type`, `title`, `description`, `usr_id`)' 
      .' VALUES (?, ?, ?, ?, ?, '; 
     $sql = $sql. $_SESSION['Memberid'] .")"; 
     $query = $this->db->prepare($sql); 
     $query->bind_param(
      'sisss', 
      $file->name, 
      $file->size, 
      $file->type, 
      $file->title, 
      $file->description 
     ); 
     $query->execute(); 
     $file->id = $this->db->insert_id; 
    } 
    return $file; 
} 

但它不起作用。我从来没有见过这种插入sql查询的方式。 我希望有人能帮忙。

TIA :)

//编辑

我也试过这个现在,并没有工作过。我做错了什么?

 protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, 
     $index = null, $content_range = null) { 
    $file = parent::handle_file_upload(
     $uploaded_file, $name, $size, $type, $error, $index, $content_range 
    ); 
    if (empty($file->error)) { 
     $sql = 'INSERT INTO `'.$this->options['db_table'] 
      .'` (`name`, `size`, `type`, `title`, `description`, `usr_id`)' 
      .' VALUES (?, ?, ?, ?, ?, ?)'; 
     $query = $this->db->prepare($sql); 
     $query->bind_param(
      'sisssi', 
      $file->name, 
      $file->size, 
      $file->type, 
      $file->title, 
      $file->description, 
      "2" 
     ); 
     $query->execute(); 
     $file->id = $this->db->insert_id; 
    } 
    return $file; 
} 
+0

你为什么不看[越来越添加其他值的方式(http://ca1.php.net/manual/en/mysqli.quickstart.prepared-statements.php)至查询,并做同样的事情? [你可能会暴露自己的SQL注入](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1)。 – miken32

+0

感谢您的评论。我试着像你说的那样去做。但它不起作用。我已将代码添加到我的第一篇文章中。我做错了什么? TIA – user2096388

回答

0

根据'bind_param'手册,它必须通过变量。唉,你传递了一个常量而不是一个变量。我没有尝试过下面的代码,但它应该做一些明智的事情。

 protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, 
     $index = null, $content_range = null) { 
    $file = parent::handle_file_upload(
     $uploaded_file, $name, $size, $type, $error, $index, $content_range 
    ); 

    if (empty($file->error)) { 
     $sql = 'INSERT INTO `'.$this->options['db_table'] 
      .'` (`name`, `size`, `type`, `title`, `description`, `usr_id`)' 
      .' VALUES (?, ?, ?, ?, ?, ?)'; 
     $query = $this->db->prepare($sql); 
     $usrId = 2; // temporary variable to store the usr_id 
     $query->bind_param(
      'sisssi', 
      $file->name, 
      $file->size, 
      $file->type, 
      $file->title, 
      $file->description, 
      $usrId 
     ); 
     $query->execute(); 
     $file->id = $this->db->insert_id; 
    } 
    return $file; 
} 
+0

谢谢瑞恩。它工作,我可以在数据库中插入“2”。但现在我有另一个问题。看起来$ _SESSION ['Memberid']不能从这个index.php文件访问,但我不知道为什么。在其他文件$ _SESSION ['Memberid']正在工作。你知道为什么吗? – user2096388

+0

我不知道为什么会话变量不可访问。我建议你检查会话是在索引脚本中启动的。还请检查其他脚本以查看它的设置。这会给你一个线索,知道发生了什么。 –

+0

那就是它!多谢瑞恩!它工作完美。 session_start();在index.php中缺少 – user2096388