2016-09-29 121 views
-1

首先,我需要說我已經搜索了2個多小時,沒有找到任何可以幫助我的答案! 因此,這裏是我的問題: 當我每次嘗試執行代碼:PHP mysqli prepare Error

if(isset($_GET['name'])){ #Line 65 
     $name = $_GET['name']; #Line 66 
     $test = $mysqli->prepare('SELECT * FROM `SkyWars_Stats` WHERE player_uuid = ":name"'); #Line 67 
     $test->bind_param(array('name' => $name)); #Line 68 
     $test->execute(); #Line 69 
    } 

我得到這個錯誤:

[Thu Sep 29 18:43:13.035006 2016] [:error] [pid 11506] [client ...:*****] PHP Warning: Wrong parameter count for mysqli_stmt::bind_param() in /var/www/html/stats/index.php on line 68

SOOOOO我做了什麼錯?

謝謝你的任何幫助:)

回答

2

首先,你使用了一個名爲佔位符,引號裏:

WHERE player_uuid = ":name" 

這需要刪除。

那麼這也是PDO的語法也:

bind_param(array('name' => $name)) 
      ^^^^^^^^^^^^^^^^^^^^^^ 

但是,您使用的是mysqli_功能在這裏不支持指定的佔位符,PDO一樣。

如果您正在連接MySQLi_ API,那麼您需要使用?佔位符。

如果您正在連接PDO,則需要將bind_param()更改爲bindParam()

不同的MySQL API不混合。

有關準備語句MySQLi_語法,請諮詢:


有關準備語句PDO語法,請諮詢:

同時使用針對各個功能相同的連接API

  • 您的連接方法/ API未知。

還要確保您的GET數組包含值。

通過PHP檢查錯誤:

如果你從一個形式得到這些,確保它不使用POST方法。

所以,這取決於你使用與你有以下沿着幫助您檢查對查詢錯誤連接API:

只有「你」知道正在使用哪一個連接。

但是,您在此標記爲mysqli,所以這表明您可能正在使用MySQLi_ API進行連接。如果是這樣,那麼按照上面的示例進行操作。

如果是mysql_,那麼這是一個更大的問題。

+0

問題是,當我刪除引號我會得到一個MySQL錯誤。由於名稱不是真實名稱,所以如下所示:60595d66-25fc-4a0a-abfa-215cd514a6b3。這不起作用。 – Alexander

+0

@亞歷山大再次,正如我在我的回答中所述,你用來連接的MySQL API是未知的。如果它是'mysql_'或'mysqli_'或PDO;有一個很大的不同。 GET數組也是未知的,並且它們是否包含值。我相信我給你足夠的答案讓你繼續。 –

0

您必須刪除在select語句

WHERE player_uuid = ":name" 

Mysqli bind_param is you need to pass the data type over to the bind parameter so that is executes the query along with bind params

mysqli_stmt :: bind_param雙引號的字符串 - mysqli_stmt_bind_param - 綁定變量來一份聲明作爲參數

面向對象的風格

bool mysqli_stmt::bind_param (string $types , mixed &$var1 [, mixed &$... ]) 

程序風格

bool mysqli_stmt_bind_param (mysqli_stmt $stmt , string $types , mixed &$var1 [, mixed &$... ]) 

綁定變量在傳遞給mysqli_prepare() SQL語句中的參數標記。

bind_param arguments:

這是通過使用$stmt->bind_param();

該函數至少需要兩個參數。

  1. 第一個是包含有關數據類型信息的字符串。
  2. 第二個是保存數據的變量。

信息字符串只能包含以下字符:b,d,i和s。這些代表blob,double,integer和string。

而且您需要在基於mysqli的規則中使用名爲?的佔位符,並且您使用的是完全無法跟蹤的:name,您需要將其刪除。

示例:使用的mysqli bind_param

$color = "purple"; 
$stmt = $mysqli->stmt_init(); 
if ($stmt->prepare("SELECT FirstName, LastName FROM Friends 
    WHERE FavoriteColor = ?")) { 
     $stmt->bind_param("s", $color); 
     $stmt->execute(); 
     $result = $stmt->get_result(); 
     while ($row = $result->fetch_row()) { 
      //do stuff with the data in the $row array 
     } 
     $result->close(); 
}