2010-02-14 279 views
3

我想讓我的頭繞過mysql。有人可以告訴我爲什麼這個MySQL查詢不起作用?我收到以下錯誤:mysqli_error()期望只有1個參數,0給出

Warning: mysqli_error() expects exactly 1 parameter, 0 given in /home/freebet2/public_html/test.php on line 11

test.php的

<?php 
     require_once($_SERVER['DOCUMENT_ROOT'].'/includes/db.php'); 
     $conn = db_connect(); 
     $result = $conn->query("ALTER TABLE users ADD COLUMN refer_old INT(10) AFTER refer_id"); 

       if(!$result){ 
       echo "Error with MySQL Query: ".mysqli_error(); 
      } 
     ?> 

db.php中

<?php 

    function db_connect() { 
     $result = new mysqli('localhost', 'user', 'password', 'db'); 
     if (!$result) { 
     throw new Exception('Could not connect to database server'); 
     } else { 
     return $result; 
     } 
    } 

    ?> 

如果我在alter字符串更改爲類似:$result = $conn->query("SELECT * FROM users refer_id");我出於某種原因沒有錯誤。

+0

嘿邁克,歡迎來到SO。解決問題後,您不必在問題的標題中添加SOLVED。只要標記答案是正確的(就像你做的那樣),你就完成了!快樂滿溢。 –

回答

3

就sql錯誤而言,'user'是否有權限改變表格?

+0

事實上,沒有一個ALTER不是爲用戶設置的特權。我已經啓用了這個,並且查詢確實創建了表,但是mysqli_error()的錯誤消息期望參數1是mysqli,布爾值仍然出現 – Michael

+0

並且您嘗試添加的列已經不存在了嗎? – jeroen

+1

大聲笑,是的,同樣的錯誤出現,我假設查詢沒有執行,但我剛剛檢查了表,它確實創建了它,我只是沒有正確設置'if'語句。謝謝你解決這個問題,過去4個小時我一直在撓頭! – Michael

4

使用mysqli_error($result)作爲mysqli_error期望連接作爲參數傳遞。

+0

是的,我把我的代碼替換爲使用mysqli_error,這有所幫助。 – Michael

+1

這解決了我的問題。這個答案應該是選定的最佳答案。 – Ahmad

+0

其實答案很混亂,因爲它以「$ result」爲例。但是,該文本解釋說「mysqli_error期望CONNECTION作爲參數傳遞」。所以,給出最初的問題示例,它應該是mysqli_error($ conn); – RationalRabbit

9

你混合面向對象和程序樣式的mysqli API的:

您正在使用面向對象:

$result = new mysqli('localhost', 'user', 'password', 'db'); 

,然後,程序:

echo "Error with MySQL Query: ".mysqli_error(); 


您應該使用OO或程序 - 但不能同時使用;如果選擇過程式,則函數會將鏈接標識符作爲參數傳遞。

例如,mysqli_error應該用面向對象的API或者叫做:

$link = new mysqli(...); 
echo $link->error; 

或者程序的API:

$link = mysqli_connect(...); 
echo mysqli_error($link); 


(當然,它不會改變事實上,您的SQL查詢中存在錯誤,但它會允許您獲取錯誤消息,這應該有助於找到該錯誤的原因)

+0

嗨,感謝您的幫助,您好,我一直在從不同的PHP書籍中挑選代碼,並錯過了兩個。 – Michael

相關問題