PHP Mysql не принимает имя таблицы в качестве переменной - PullRequest
0 голосов
/ 16 февраля 2019

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 LOG:

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 непосредственно в операторе, проблем не возникает.

Что происходит?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Вы пропустили аргумент $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 голосов
/ 16 февраля 2019

Попробуйте использовать prepare и execute_query вместо query и exec с сеттерами, это более чисто.

...