2014-02-21 161 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