2017-06-13 6 views
0

phpでsql(mysqli)の文を準備しようとしましたが、上記のエラーコードがあります。私は私は私がエラーを取得していないエコーに示されている任意のプレースホルダせずに正確な文を挿入する場合はbooleanでメンバー関数bind_param()を呼び出すと、プレースホルダーを使用するときにprepare()関数がfalseを返す

if (!$this->isUserExist($username, $token)) {return false;} 
    $tables = array();   
    $tables[0] = "faculty";  
    $tables[1] = "department"; 
    $tables[2] = "teacher";  
    $tables[3] = "announcement"; 
    $ttable = $tables[$table]; 
    var_dump($ttable); // faculty 
    var_dump($id);  // 6 
    echo "DELETE FROM ".$ttable." WHERE ".$ttable.".id = ".$id.""; //returns DELETE FROM faculty WHERE faculty.id = 6 
    $stmt = $this->con->prepare("DELETE FROM ? WHERE ?.id = ?"); //Fatal error occurs here 
    $stmt->bind_param("sss",$ttable,$ttable,$id); 
    //$stmt->execute(); 
    if ($stmt->num_rows> 0) { 
     return "true"; 
    } else { 
     return "false"; 
    } 

、およびMySQLデータベースが正常に行を削除します。これは私が書いたコードです。

$stmt = $this->con->prepare("DELETE FROM faculty WHERE faculty.id = 6"); //no errors occur, executing this statement does affect row in MySQL database 
+3

はこのような何かを行います。 __Over__。 –

+0

テーブル名とカラム名の両方を割り当てる正しい方法は何ですか? – user3460802

答えて

0

システムが「準備」テーブル名に許可していない、あなたはこのよう

$stmt = $this->con->prepare("DELETE FROM ".$ttable." WHERE ".$ttable.".id = ?"); //Fatal error occurs here 
$stmt->bind_param("s",$id); 
+0

答えに応じてコードを変更した後、すべてが機能しました。 ご返信ありがとうございます! – user3460802

+0

@ user3460802あなたが私の答えが好きで、助けてくれたら、あなたはそれを投票できますか? – nacho

+0

私はあなたの答えを投票しましたが、私は評判が15未満で公に公開されていません – user3460802

0

それを行う必要があり、このhttp://us3.php.net/manual/en/book.pdo.php#69304

表および列名がパラメータで置き換えることができないお読みください。 PDOであなたは、テーブル名とカラム名をバインドすることはできません

$query = "DELETE FROM ".$ttable." WHERE ".$ttable.".id = ?"; 
$stmt = $this->con->prepare($query); 
$stmt->bind_param("s",$id); 
+0

ご返信ありがとうございます。あなたが提案した機能と変更された機能を正しく適用しました。 – user3460802

+0

@ user3460802ようこそ –

関連する問題