今天写好代码后,结果运行后,SQL语句报了如下错误提示:
Fatal error: Uncaught Error: Call to a member function bind_param() on bool in E:\phpstudy_pro\WWW\453535\admin\model\tag.php:70 Stack trace: #0 E:\phpstudy_pro\WWW\453535\admin\controller\article.php(254): TagSql->article_edit_tag_select(Object(mysqli), '23,24,25,26,27') #1 E:\phpstudy_pro\WWW\453535\admin\index.php(23): require_once('E:\\phpstudy_pro...') #2 {main} thrown in E:\phpstudy_pro\WWW\453535\admin\model\tag.php on line 70
原因:
上面这个错误的大概意思就是在 bind_param 处发生了错误,一般该句的上一句代码都是类似于:$stmt = $db->prepare($query) 这种,因为这句没有执行成功,所以会在 bind_param 处发生错误,原因大多都是在$query这里,即sql语句不正确。
解决方法
知道了原因,解决就容易多了。我们只需要修正了sql语句的问题后,最终也就解决这个问题了。
简单的来谈谈我是如何解决的?我长话短简说一下思路吧!
1、以下是我报错部份的具体代码:
public function article_edit_tag_select($mysqli,$tag_id,$name=''){
$sql_select = "SELECT `name` FROM `tag` WHERE FIND_IN_SET(`tag`,?)";
$stmt=$mysqli->prepare($sql_select);
$stmt->bind_param('s',$tag_id);
$stmt->execute();
$stmt->bind_result($name);
$str= '';
while ($stmt->fetch()) {
$str .= $name.",";
}
return $str;
}
2、我仔细看了一下是我的SQL语句写的有问题,tag表根本没有tag这个字段,FIND_IN_SET就找不到。正确写法如下:
$sql_select = "SELECT `name` FROM `tag` WHERE FIND_IN_SET(`id`,?)";
今天我还发现一个问题,以下这种SQL写法也是会提示这个错误的,类似:COUNT(*) 这种会直接报错。
$sql = "SELECT `id`,COUNT('id') AS `count` FROM `tag` WHERE `name` = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s",$name);
$stmt->execute();
$stmt->bind_result($id,$count);
2020年09月13日 12:20:05 沙发
今天我也遇到了这个问题。按照博主说的,主要就是要SQL语句有问题,我仔细看了一下代码,果然出错了,具体如下:
原因:
我的user表中,avatarthumbnail字段是没有的,正确的字段是avatar-thumbnail,因此,细节很重要。我就少了一个连接符,就报错了,我还搞了半天。