【发布时间】:2017-11-26 21:26:08
【问题描述】:
当我尝试运行这个函数时,我得到:
致命错误:未捕获错误: 调用成员函数 bind_param() on /var/www/html/include/function/token.php:73 中的布尔值堆栈跟踪:#0 /var/www/html/view.php(14): dirTOperm('/var/www/html/u...') #1 {main} 在第 73 行的 /var/www/html/include/function/token.php 中抛出
函数如下:
function dirTOperm($dir){
global $mysql_ip, $mysql_user, $mysql_pass, $mysql_database_name,$_SESSION;
$conn = new mysqli($mysql_ip, $mysql_user, $mysql_pass, $mysql_database_name);
$stmt = $conn->prepare('SELECT * FROM token-perm WHERE directory = ?');
$stmt->bind_param('s', $dir);
$stmt->execute();
$result = $stmt->get_result();
$checktoken = $result->num_rows;
$row = $result->fetch_assoc();
$stmt->close();
$conn->close();
if ($checktoken == 0) {
$permtoken = GenerateRandomString(512);
$conn = new mysqli($mysql_ip, $mysql_user, $mysql_pass, $mysql_database_name);
$stmt = $conn->prepare('INSERT INTO token-perm (token,directory,date) VALUES ("?","?","?")');
$stmt->bind_param('sss', $permtoken,$dir,date('d-m-Y H:m'));
$stmt->execute();
$stmt->close();
$conn->close();
return $permtoken;
}else {
return $row['token'];
}
}
连接数据是正确的,尝试在google上搜索我还没有起来解决,你能帮我吗?
【问题讨论】:
-
你需要检查
prepare()的结果,它可能会返回false,见:php.net/manual/en/mysqli.prepare.php -
在表名中使用破折号有点...... emm ...粗糙。
-
注意:您不需要在
?周围使用引号",准备好的语句将为您打包变量。 -
即使没有 " 问题也无法解决
-
我知道,这只是一个说明而不是解决方案。无论如何在prepare语句之后做
echo $conn->error看看错误