我目前正在学习PHP和MySQL。我刚刚编写了一个处理所有MySQL流量的类,但我遇到了一些错误。
function table_exists($tablename){
// check if table exists
$stmt = $this->db->prepare("SHOW TABLES LIKE '?'");
$stmt->bind_param("s", $tablename); //This is line 24.
$stmt->execute();
$ar = $stmt->affected_rows;
$stmt->close();
if ($ar > 0){
return true;
} else {
return false;
}
}
这是带问题的代码,我得到的错误是
生成警告: mysqli_stmt :: bind_param() [mysqli-stmt.bind-param]:数量 变量与数量不匹配 准备好的声明中的参数 C:\ XAMPP \ htdocs中\邮件\ datahandler.php 第24行
想法?
由于
答案 0 :(得分:2)
使用预准备语句时无需使用引号。
$stmt = $this->db->prepare("SHOW TABLES LIKE ?");
此外,您可能希望使用information_schema视图而不是SHOW TABLES
,这样可以提供更多灵活性。
答案 1 :(得分:2)
您还必须使用数字作为bind_param()
的第一个参数$stmt->bind_param(1, $tablename);
见这里:http://php.net/manual/pdostatement.bindparam.php
对于字符串,您也可以将数组传递给execute()。
答案 2 :(得分:0)
private function table_exists($tablename){
// check if table exists
$stmt = $this->db->query("SHOW TABLES");
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$arr[]=$row;
}
$ar=0;
foreach($arr as $val){
foreach($val as $value){
if($value==$tablename) $ar=1;
}
}
unset($stmt);
if ($ar == 1){
return true;
} else {
return false;
}
}