$stmt = mysqli_prepare($link,"
SELECT *
FROM ads
INNER JOIN dept ON dept.id_dept = ads.in_dpt
INNER JOIN members ON members.idMem = ads.from_Mem
INNER JOIN sub_cat_ad ON id_sub_cat = ads.ads_in_Cat
INNER JOIN cat_ad ON idCat_ad = sub_cat_ad.from_cat_ad
WHERE ads_in_Cat = ? ");
if(isset($_GET['fromSCat'])){
$fromSCat = mysqli_real_escape_string($link,$_GET['fromSCat']);
}
mysqli_stmt_bind_param($stmt,'i',$fromSCat);
mysqli_stmt_execute($stmt);
mysqli_stmt_fetch($stmt);
$tot=mysqli_stmt_num_rows($stmt); //Ouput: 0
没有准备好的陈述,没关系
答案 0 :(得分:1)
你的mysql_real_escape_string()
参数倒退了。它是($string_to_escape, $optional_database_handle)
。因此,您尝试查询WHERE ads_in_Cat='Resource #1'
而不是$ _GET参数。
答案 1 :(得分:1)
可能不是它返回0的原因,但你是双重转义$fromSCat
- 你在预准备语句中不需要escape_string,bind_param已经这样做了。尝试注释掉escape_string&看看会发生什么。
此外,您可能希望在if
语句中搜索bind / exec / fetch调用,除非在脚本中先前定义了$fromSCat
。
后续评论:该错误意味着您的数据库是粗略的。你有主键吗?相关表上的索引? mysqli对它抛出异常有点奇怪,这不是它的任何业务。如果您无权修复数据库表,请在脚本顶部附近添加mysqli_report(MYSQLI_REPORT_OFF);
。
(另外,如果你可以:改为使用PDO。在语法和文档方面都更好,更清晰。)