使用预准备语句查询参数化表名

时间:2016-10-17 16:33:39

标签: php mysql

在准备在php中创建表单包装器时,我需要在使用数据库时使用表的动态名称。这是因为我有许多不同的表用于将各种表单中的数据插入到单个包装器中。分别为每个表编写特定查询,这似乎是不切实际的方法,另一方面,参数化表名不支持预处理语句。从编程中没有无法解决的问题开始,我努力通过专家文献和网络论坛找到解决方案,但遗憾的是没有成功。如果有人知道这个优雅的解决方案,我将非常感激!

<?php
……
    $dname = date("dmyHis", time());
    $tpath = $_POST['tpath'].$dname.".txt";
    $tdate = date("dmyHis");
    if (isset($_POST["table-name"])){
        $tname = $_POST["table-name "]; /** not sanitized yet */
        $prep = "INSERT INTO $tname  (t_name, t_path) VALUES (?, ?)"; /** it works if not var  */
        if ($qry = $conn->prepare($prep)){
            $qry->bind_param('ss', $tdate, $tpath);
            if (!$qry->execute()){
                header('Location: ../error.php?err=fail : INSERT tname');
                exit();
            }
            mysqli_close($conn);
        }else{
            header("Location: ../error.php?err=Database error: table-name is >> " .$tname ." cannot prepare statement INSERT tname");
            exit();
        }
    }else{
        echo "<script>alert('SHIT ISSET tname');</script>";
        exit();
    }
……
?>

0 个答案:

没有答案