通过PHP动态创建Mysql表?

通过PHP动态创建Mysql表?,php,jquery,mysql,Php,Jquery,Mysql,这是Siva,我在这里讨论用HTML字段名动态创建Mysql表 在这里您可以看到示例HTML代码 <div id='container'> <h1 id="form-name" style="background-color: rgb(255, 255, 255); box-shadow: none; border: none; margin: 8px 15px;">New Form</h1> <f

这是Siva,我在这里讨论用HTML字段名动态创建Mysql表

在这里您可以看到示例HTML代码

    <div id='container'>
            <h1 id="form-name" style="background-color: rgb(255, 255, 255); box-shadow: none; border: none; margin: 8px 15px;">New Form</h1>
            <form action="saveData.php" method="post" id="preview_form" novalidate="novalidate">
        <div class="row" style="display: block;">
    <label class="field" for="how_to_use_it?">How To Use It?</label><span class="radioButton" data="" id="how_to_use_it?">
    <label class="option" for="how_to_use_it?_option_1">
    <input class="radio" type="radio" name="how_to_use_it?" id="dialog_box_how_to_use_it?_option_1" value="Option 1" data="{&quot;validate&quot;:{&quot;required&quot;:false,&quot;messages&quot;:{}}}">Option 1</label><label class="option" for="how_to_use_it?_option_2">
    <input class="radio" type="radio" name="how_to_use_it?" id="how_to_use_it?_option_2" value="Option 2">Option 2</label>
<label class="option" for="how_to_use_it?_option_3"><input class="radio" type="radio" name="how_to_use_it?" id="how_to_use_it?_option_3" value="Option 3">Option 3</label></span></div>
<input type="submit" class="button blue" value="Submit" id="submit-form"><input type='hidden' id='tname' name='tname' value='surveyForm_6' />
</form>
</div> <!--container-->
这里
如何使用它?
这将是字段的名称,它可能是文本框、收音机、复选框等,元素的名称也可能是它可能有或可能没有特殊字符的样子

这就是我尝试过的:

<?php 
require_once"../session.php";
$selFname =$dbHandle->execQuery("SELECT file_name,max(survey_form_id) as id FROM master_survey_forms WHERE survey_form_id=(SELECT max(survey_form_id) FROM master_survey_forms)");
$fetFname =$dbHandle->fetchObjectQuery($selFname);
$last_saved_on =date("Y-m-d H:i:s");
if($fetFname->file_name != '')
{
    $tmpName =explode("_",$fetFname->file_name);
    $tname =$tmpName[0].'_'.($fetFname->id);
}
else
{
    $tname ='surveyForm_1';
}
if (isset($_POST)) {
    $values="'$fetFname->id' ,'$userId','$last_saved_on',";

    foreach ($_POST as $key => $val) {
        $sqlin .= " ".strtolower($key)." VARCHAR(255) , ";
        if($key != 'tname')
        {
            $fldNamein .=strtolower($key).',';
        }
        $tmpVals="";
        if(is_array($val)){

            if(!empty($val) && $key != 'tname') {
                foreach($val as $vls) {
                    if($key != 'tname')
                    {
                        $tmpVals .=$vls.',';
                    }
                }
                $tmpVals =substr($tmpVals,0,strlen($tmpVals)-1);
            }
            else
            {
                 $tmpVals ="";
            }
        }
        else
        {
            if($key != 'tname')
            {
                $tmpVals =$val;
            }
        }
        if($key != 'tname')
        {
            $values .=" '$tmpVals'".' ,';
        }
        $tsname =$_POST['tname'];
    }
    if($tsname != '')
    {
        $tname =$tsname;
    }
    else
    {
        $tname =$tname;
    }
    echo $sqlin.'sdf';
    $fldName='INSERT INTO '.$tname.'(survey_form_id ,submitted_by,submitted_on, '.$fldNamein;
    $sql = 'CREATE TABLE IF NOT EXISTS ';
    $sql .= $tname.'('.$tname.'_id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY('.$tname.'_id), survey_form_id  varchar(255) ,submitted_by  varchar(15) ,submitted_on  timestamp , '.$sqlin;
    $sql = preg_replace('/, $/', '', $sql);
    $sql .= ')';
    echo $sql;
    if($tsname == '')
    {
        $dbHandle->execQuery($sql);
    }
    else
    {
        $insVal =substr($fldName,0,strlen($fldName)-1).') VALUES ('.substr($values,0,strlen($values)-1).' )';
        $dbHandle->execQuery($insVal);
    }
    //header("Location:index.php");
}
?>

执行此操作的方法是,基于对
$\u POST
中的键进行迭代,生成一个
创建表
查询

请注意,如果要执行此操作,则需要转义列名(因为您有空格、特殊字符等)

MySQL转义字符是
`

编辑:根据您的代码,我猜这是您的问题,如上所述:

$sqlin .= " ".strtolower($key)." VARCHAR(255) , ";
// ..
$fldNamein .=strtolower($key).',';
只需转义字段名:

$sqlin .= " `".strtolower($key)."` VARCHAR(255) , ";
// ..
$fldNamein .= '`' . strtolower($key) . '`,';

(如果这不起作用,请提供
$sql
的值以及
MySQL\u error()
的任何结果)

请参阅,请。。。你的错误是什么?你能发布你的“echo$sql;”行的结果,告诉我们它在phpmyadmin中是否有效吗?我得到的输出是一个表,但没有在收音机中的字段名称,它不在表中[how__使用它?]“how_使用它?”->这个字段不在那里。这是mySql结果:'CREATE table if not EXISTS surveyForm 6(surveyForm_6_id INT NOT NULL自动递增,主键(surveyForm_6_id),surveyForm_id varchar(255),由varchar(15)提交,在时间戳上提交)“是的,它正在逃逸特殊对流器……对不起,伙计……它不工作了……@SivaG我可以从你在评论中输出的
$sql
中看到,
$sqlin
的值是多少?还有
preg_replace('/,$/,'','$sql);
我得到了它,伙计……如果我删除preg_replace()它正在工作……谢谢。。。。。。。。。。
$sqlin .= " `".strtolower($key)."` VARCHAR(255) , ";
// ..
$fldNamein .= '`' . strtolower($key) . '`,';