SELECT with mysqli returns null


SELECT with mysqli returns null

我试图使用mysqli从表中选择一行,但我所能得到的是一堆空值,我真的不知道为什么。相同的查询工作使用正常的php mysql,如果我尝试在phpMyAdmin上执行相同的查询使用参数我传递通过fine。

代码如下:

$con = mysqli_connect('localhost', 'user', 'pass',"db");
if (mysqli_connect_errno()){
    die("Failed to connect to MySQL: " . mysqli_connect_error());
}
$coupon = $_GET['coupon'];
$sql = mysqli_prepare($con, "SELECT * FROM coupon WHERE coupon=?");
$sql->bind_param('s', $coupon);
$sql->execute();
$sql->store_result();
echo $sql;

返回
"affected_rows":null,
"insert_id":null,
"num_rows":null,
"param_count":null,
"field_count":null,
"errno":null,
"error":null,
"error_list":null,
"sqlstate":null,
"id":null

我已经试着在这里和谷歌上搜索答案,但我找不到任何接近我的问题。我做错了什么?

您必须决定是使用过程式方法还是面向对象方法。从你的代码,似乎你调用mysqli扩展的过程版本,然后你尝试使用对象。参考文档中的例子,包括面向对象的和过程的,并选择一个。

作者的最终解决方案(从问题内容中移出):

正如用户@RiggsFolly所建议的那样,我根本没有获取结果,再加上我混合了用户@Alex所建议的过程和面向对象方法。以下是工作代码,供将来遇到类似问题的人参考:

$coupon = $_GET['coupon'];
if ($sql = mysqli_prepare($con, "SELECT * FROM coupon WHERE coupon=?;")){
    mysqli_stmt_bind_param($sql, 's', $coupon);
    mysqli_stmt_execute($sql);
    mysqli_stmt_bind_result($sql, $ID, $coupon, $discount, $uses);
    mysqli_stmt_fetch($sql);
    $data = array(
        'ID' => $ID,
        'coupon' => $coupon,
        'discount' => $discount,
        'uses' => $uses
    );
    echo json_encode($data);
}else{
    echo json_encode(FALSE);
}