亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

致命錯誤:調用布爾值上的成員函數bindparam()

致命錯誤:調用布爾值上的成員函數bindparam()

暮色呼如 2019-06-06 15:31:38
致命錯誤:調用布爾值上的成員函數bindparam()我忙著處理一個從DB獲取設置的函數,突然,我遇到了以下錯誤:Fatal error: Call to a member function bind_param() on boolean in C:\xampp2\htdocs\application\classes\class.functions.php on line 16通常情況下,這意味著我從不存在的表和東西中選擇一些東西。但在這種情況下,我不是.這是getSetting職能:public function getSetting($setting){     $query = $this->db->conn->prepare('SELECT value, param FROM ws_settings WHERE name = ?');     $query->bind_param('s', $setting);     $query->execute();     $query->bind_result($value, $param);     $query->store_result();     if ($query->num_rows() > 0)     {         while ($query->fetch())          {             return $value;             if ($param === '1')             {                 $this->tpl->createParameter($setting, $value);             }         }     }     else     {         __('invalid.setting.request', $setting);     }}這個$this->db變量通過構造函數傳遞。在需要的情況下,這是:public function __construct($db, $data, $tpl){     $this->db = $db;     $this->tpl = $tpl;     $this->data = $data;     $this->data->setData('global', 'theme', $this->getSetting('theme'));}此外,由于我使用的是數據庫,所以我的數據庫連接:class Database{     private $data;     public function __construct($data)     {     $this->data = $data;     $this->conn = new MySQLi(       $this->data->getData('database', 'hostname'),        $this->data->getData('database', 'username'),        $this->data->getData('database', 'password'),        $this->data->getData('database', 'database')     );     if ($this->conn->errno)     {         __('failed.db.connection', $this->conn->errno);     }     date_default_timezone_set('Europe/Amsterdam');}我已經測試了連接,100%的陽性,它的工作原理。我在配置文件中設置DB連接:'database' => array(     'hostname' => '127.0.0.1',     'username' => 'root',     'password' => ******,     'database' => 'wscript')現在奇怪的是:表存在,請求的設置存在,DB存在,但是錯誤不會留下。這里有一些證據證明DB是正確的:
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

問題在于:

$query = $this->db->conn->prepare('SELECT value, param FROM ws_settings WHERE name = ?');$query->bind_param('s', $setting);

這個prepare()方法可以返回false你應該檢查一下。為什么它會回來false,可能是表名或列名(在SELECTWHERE條款)是不正確的?

另外,考慮使用類似的$this->db->conn->error_list若要檢查解析SQL時發生的錯誤,請執行以下操作。(我偶爾會回顯實際的SQL語句字符串,并粘貼到phpMyAdmin中進行測試,但肯定有一些地方失敗了。)


查看完整回答
反對 回復 2019-06-06
?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

任何時候你得到.。

“致命錯誤:對布爾值上的成員函數BIND_PARAM()的調用”

.這很可能是因為你的查詢有問題.這個prepare()可能會回來FALSE(一個布爾值),但是這個通用的失敗消息并沒有給你留下太多線索。如何發現您的查詢有什么問題?你,你們!

首先,確保打開錯誤報告并使其可見:在打開文件后立即將這兩行添加到文件的頂部。<?php標簽:

error_reporting(E_ALL);ini_set('display_errors', 1);

如果在php.ini中設置了錯誤報告,則不必擔心這一點。只需確保您優雅地處理錯誤,不要向用戶透露任何問題的真正原因。向公眾揭示真正的原因可能是給那些想要傷害你的網站和服務器的人一個金刻的邀請。如果不希望向瀏覽器發送錯誤,則始終可以監視Web服務器錯誤日志。日志位置因服務器而異,例如,在Ubuntu上,錯誤日志通常位于/var/log/apache2/error.log..如果您正在檢查Linux環境中的錯誤日志,可以使用tail -f /path/to/log在控制臺窗口中查看實時發生的錯誤.或您所做的錯誤。

一旦您對標準錯誤報告進行了平方,添加了對數據庫連接和查詢的錯誤檢查,將為您提供更多關于正在發生的問題的詳細信息。查看此示例,其中列名不正確。首先,返回通用致命錯誤消息的代碼:

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";$query = $mysqli->prepare($sql)); 
// assuming $mysqli is the connection$query->bind_param('s', $definition);$query->execute();

這個錯誤是通用的,對你解決正在發生的事情沒有多大幫助。

使用更多的代碼行,您可以獲得非常詳細的信息,您可以使用這些信息來解決問題。立馬..檢查prepare()語句的真實性,如果它是好的,您可以繼續綁定和執行。

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
    $query->bind_param('s', $definition);
    $query->execute();
    // any additional code you need would go here.} else {
    $error = $mysqli->errno . ' ' . $mysqli->error;
    echo $error; // 1054 Unknown column 'foo' in 'field list'}

如果有什么問題,你可以說出一條錯誤信息,直接帶你去處理這個問題。在這種情況下沒有foo列中,解決問題是微不足道的。

如果您選擇,可以將此檢查包含在函數或類中,并像前面提到的那樣優雅地處理錯誤來擴展它。


查看完整回答
反對 回復 2019-06-06
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

prepare因此,只有當布爾值失敗時才返回它。FALSE,為了避免錯誤,您需要檢查是否是True執行前先:

$sql = 'SELECT value, param FROM ws_settings WHERE name = ?';if($query = $this->db->conn->prepare($sql)){
    $query->bind_param('s', $setting);
    $query->execute();
    //rest of code here}else{
   //error !! don't go further
   var_dump($this->db->error);}


查看完整回答
反對 回復 2019-06-06
  • 3 回答
  • 0 關注
  • 1498 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號