Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 准备好的语句示例_Php_Mysqli_Prepared Statement - Fatal编程技术网

Php 准备好的语句示例

Php 准备好的语句示例,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,在我目前正在编写的这个新系统中(在学习PHP的同时),我一直在尝试使用预先准备好的语句,但找不到一个可以让这段代码正常工作的示例。在花了相当长的时间之后,我在没有准备好陈述的情况下写了它(否则我仍然会被卡住) 但是,如果有人能告诉我如何使用预先准备好的语句实现相同的功能,那就太好了。我正在为INSERTs和UPDATEs使用准备好的语句,但没有使用SELECT使一个语句起作用 这段代码是一个AJAX页面,用于根据页面上的选择填充下拉列表 代码如下: <?php require_once('

在我目前正在编写的这个新系统中(在学习PHP的同时),我一直在尝试使用预先准备好的语句,但找不到一个可以让这段代码正常工作的示例。在花了相当长的时间之后,我在没有准备好陈述的情况下写了它(否则我仍然会被卡住)

但是,如果有人能告诉我如何使用预先准备好的语句实现相同的功能,那就太好了。我正在为
INSERT
s和
UPDATE
s使用准备好的语句,但没有使用
SELECT
使一个语句起作用

这段代码是一个AJAX页面,用于根据页面上的选择填充下拉列表

代码如下:

<?php
require_once('assets/includes/config.php');

if ((!isset($_GET['cat']) || !is_numeric($_GET['cat'])) && (!isset($_GET['subcat']) || !is_numeric($_GET['subcat'])))
    $response = array('success' => FALSE);
else {
    $conn = mysqli_connect($config["db"]["host"],$config["db"]["dbname"],$config["db"]["password"],$config["db"]["username"]);
    $cat= mysqli_real_escape_string($conn, $_GET['cat']);
    $subcat= mysqli_real_escape_string($conn, $_GET['subcat']);
    $sql = "SELECT * FROM jf_data WHERE cat = $cat and subcat = $subcat;";
    $result = mysqli_query($conn,$sql);
    $options = "";

    while($row = mysqli_fetch_array($result))  {
        $options .= '<option value="'. $row['id'] .'">'. $row['data'].'</option>';
    }
    $response = array(
        'success' => TRUE,
        'options' => $options
    );
    }

header('Content-Type: application/json');
echo json_encode($response);
?>

我来试一试:

$conn = mysqli_connect($config["db"]["host"],$config["db"]["username"],$config["db"]["password"],$config["db"]["dbname"]);

$cat = $_GET['cat'];
$subcat = $_GET['subcat'];
$options = '';

$sql = "SELECT id,data FROM jf_data WHERE cat = ? and subcat = ?;";

if($stmt = mysqli_stmt_prepare($conn,$sql)){
    mysqli_stmt_bind_param($stmt,'ss',$cat,$subcat);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($stmt,$id,$data);

    while(mysqli_stmt_fetch($stmt)){
        $options .= '<option value="' . $id . '">' . $data . '</option>';
    }

    mysqli_stmt_close($stmt);
}

$response = array(
    'success' => TRUE,
    'options' => $options
);
这允许非常简单的修改,无论何时需要使用它,只需添加require:

require_once 'requires/mysqli_[appname]_SUID.php';

你可以走了。不知道这是否也有帮助,只是我的练习。

谢谢。绝对不是故意的。有用的问题(和答案)。该示例对于以后的重用非常有用。尽管我得到了以下信息:警告:mysqli_stmt_prepare()希望参数1是mysqli_stmt,对象在第15行的xxx中给出-这在“if($stmt)”上line@Graeme-抱歉,之前没有注意到这一点,您的
mysqli_connect()
语句出现问题。它需要转到mysqli_connect($host、$user、$password、$database);我已经用正确的顺序更新了答案,并提供了一个指向文档的链接和一个示例设置。
require_once 'requires/mysqli_[appname]_SUID.php';