我试图使用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);
}