2016-01-24 70 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