2016-01-24 73 views
0

您好我正在嘗試在函數中使用預處理語句。我有下面的功能,它應該根據輸入的國家ID在一個數據庫中返回一個國家的詳細信息 - 然後我使用一個數組來獲取公司名稱。我不知道如何在使用預處理語句時從函數中輸出要用於數組的數據。我知道我錯過了一些基本的東西。請看下面。在函數中使用預處理語句

function findCountryname($countryID){ 
include 'connect.php'; 

$stmt = $conn->prepare("SELECT * FROM countries WHERE id=? and 
pic!='NULL'"); 
$stmt->bind_param("i", $countryID); 
$stmt->execute(); 
} 

的 'connect.php' 文件由以下部分組成:

<?php 
global $conn, $dbname, $username,$servername, $password; 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "country"; 
$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
die("Connection failed: " . $conn->connect_error); 
} 
?> 

這是原來的功能:

function findCountryname($countryID){ 
$result = mysql_query("SELECT * FROM `countries` WHERE `id`=' $countryID '  
and `pic` != 'nothing' "); 
return $result; 
} 

回答

0

您可以使用mysqli's fetch_assoc獲取從所得到的數據查詢並將其存儲在數組中,然後返回該數組。

所以你的函數現在變爲: -

function findCountryname($countryID){ 
include 'connect.php'; 

$stmt = $conn->prepare("SELECT * FROM countries WHERE id=? and 
pic!='NULL'"); 
$stmt->bind_param("i", $countryID); 
$stmt->execute(); 
$data = $stmt->fetch_assoc(); 
return $data; 
} 
+0

mysqli execute將返回一個布爾值,而不是一個對象。 – Devon

+0

@Devon正確,答案已更新。 – Akshay

+0

仍然不正確,fetch_assoc是結果對象的函數,而不是stmt對象。 – Devon

0

沒有理由使用全局變量或包含函數中。如果你堅持程序代碼,你應該將mysqli對象作爲參數注入到函數中。

語句執行後,您需要檢索mysqli結果對象進行操作。如果你剛剛得到第一行,下面的例子將工作。如果你期望多行,你將不得不在循環中調用fetch_assoc,因爲它一次只能檢索一行。

function findCountryname($countryID, mysqli $conn) { 

    $stmt = $conn->prepare("SELECT * FROM countries WHERE id=? and pic!='NULL'"); 
    $stmt->bind_param("i", $countryID); 
    $stmt->execute(); 
    // Get the mysqli result object 
    $result = $stmt->get_result(); 
    // Return the first row of data in an associative array 
    $data = $result->fetch_assoc() 
    return $data; 

} 
+0

嗨對不起,我確定我仍然失去了一些東西,因爲如果我使用你的代碼,我得到一個錯誤。你需要在函數之前定義$ username等$ conn的值嗎? –

+0

@SillyQuestionBoy。我假設$ conn是在connect.php中定義的。你只需要注入它作爲這個函數的第二個參數。 – Devon