在函数中使用预处理语句

时间:2016-01-24 17:00:20

标签: php prepared-statement

您好,我试图在函数中使用预准备语句。我有以下功能,它应该根据输入国家/地区的ID返回数据库中国家/地区的详细信息 - 然后使用数组获取公司名称。当我使用预准备语句时,我不知道如何从函数输出要在数组中使用的数据。我知道我遗漏了一些基本的东西。请参阅下文。

<?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);
}
?>

&#39; connect.php&#39;文件包含以下内容:

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

这是原来的功能:

{{1}}

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;

}