【问题标题】:SELECT with mysqli returns null带有 mysqli 的 SELECT 返回 null
【发布时间】:2015-09-07 19:52:27
【问题描述】:

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

代码如下:

$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_error() 说什么?您需要添加一些错误检查。
  • 您确定mysqli_prepare() 正在返回一个语句而不是错误吗?你确定$_GET['coupon'] 正在返回你所期望的吗?
  • 看在埃文斯的份上。 R.T.?.M 尝试获取结果。 $sqlprepare 的结果,而不是结果行
  • @Mike mysqli_error() 为空。
  • @Chris 是的,$_GET['coupon']mysql_prepare() 都可以正常工作

标签: php mysqli


【解决方案1】:

您必须确定您使用的是过程方法还是 OOP 方法。从您的代码中,您似乎调用了 mysqli 扩展的程序版本,然后您尝试使用对象。请参阅the documentation 示例,包括面向对象和过程的示例,然后选择一个。

【讨论】:

  • 这不是真正的答案 - 更多的是评论。
【解决方案2】:

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

正如用户 @RiggsFolly 所建议的那样,我根本没有获取结果,而且我正在按照用户 @Alex 的建议混合程序和 OOP 方法。以下是工作代码,供将来遇到类似问题的任何人参考:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多