为什么我为PHP编写的PHP语句不起作用?

时间:2010-10-11 17:01:30

标签: php mysql

我目前正在学习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行

想法?

由于

3 个答案:

答案 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;
        }
    }