PHP Mysql不接受表名作为变量

问题描述 投票:1回答:2

mysql无法在函数中的变量中识别我的表名,它可以是什么?

我的PHP代码:

$TableMaster = "table_name";
function recursiveDelete($id,$db,$table){
    $db_conn = $db;
    $query = $db->query("SELECT * FROM ".$table." WHERE Padre = '".$id."' ");
    if ($query->rowCount()>0) {
        while($current=$query->fetch(PDO::FETCH_ASSOC)) {
            recursiveDelete($current['id'],$db_conn);
        }
    }
    $db->exec("DELETE FROM ".$table." WHERE id = '".$id."' ");
}
recursiveDelete($_POST['id'],$db,$TableMaster);

错误PHP日志:

PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE Father = '99'' at line 1' in

注意:但是当我在语句中直接写出我的mysql表的名称时没有问题。

发生了什么?

php mysql syntax var
2个回答
3
投票

在进行递归调用时,您省略了$table参数。

也没有必要使用$db_conn变量,你可以使用$db

function recursiveDelete($id,$db,$table){
    $query = $db->query("SELECT * FROM ".$table." WHERE Padre = '".$id."' ");
    if ($query->rowCount()>0) {
        while($current=$query->fetch(PDO::FETCH_ASSOC)) {
            recursiveDelete($current['id'],$db,$table);
        }
    }
    $db->exec("DELETE FROM ".$table." WHERE id = '".$id."' ");
}

0
投票

尝试使用prepareexecute_query而不是queryexec与setter它更干净。

© www.soinside.com 2019 - 2024. All rights reserved.