Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP数组创建mysql表_Php_Mysql_Arrays - Fatal编程技术网

从PHP数组创建mysql表

从PHP数组创建mysql表,php,mysql,arrays,Php,Mysql,Arrays,用户正在创建一个表。用户输入表中的字段数,并根据输入的字段数生成表单。然后输入列的名称和类型。然后,我根据他们输入的内容创建表 我可以让数组正确填充,但我的错误消息说我有语法错误。我肯定我做错了什么,但我尝试在查询中添加一个while循环,因为没有设置要输入的变量数。这就是我所拥有的。如果有更好的办法,我洗耳恭听 $sql = 'CREATE TABLE $table ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), ';

用户正在创建一个表。用户输入表中的字段数,并根据输入的字段数生成表单。然后输入列的名称和类型。然后,我根据他们输入的内容创建表

我可以让数组正确填充,但我的错误消息说我有语法错误。我肯定我做错了什么,但我尝试在查询中添加一个while循环,因为没有设置要输入的变量数。这就是我所拥有的。如果有更好的办法,我洗耳恭听

    $sql = 'CREATE TABLE $table (
id INT NOT NULL AUTO_INCREMENT,  
PRIMARY KEY(id), ';

        while($numDone < $totalFields){
            $sql .= $colName[$x] . ' ' . $types[$x] . ', ';
            $x++;
            $numDone++;
        }
        $sql .= ')';
    $query1 = mysql_query($sql) or die(mysql_error());
$sql='CREATE TABLE$TABLE(
id INT非空自动增量,
主键(id),';
而($numDone<$totalFields){
$sql.=$colName[$x].'.$types[$x].',';
$x++;
$numDone++;
}
$sql.=');
$query1=mysql\u query($sql)或die(mysql\u error());
**解决 我将单引号改为双引号,对$table使用点运算符,并为逗号添加了if语句。它现在开始工作了。

首先,这个

'CREATE TABLE $table'
不会填写$table,但会按字面意思填写

CREATE TABLE $table
如果您希望显示变量,请使用
。如果您只是回显
$sql
,您会发现这一点。可能会有更多,但可能很容易通过调试发现…

1 将查询的单引号(')更改为双引号(“)

2. 或者使用点运算符(.)附加php变量

$tableName = "mytable";
echo $query1 = "SELECT * FROM $tableName";
echo $query2 = 'SELECT * FROM $tableName';
//输出

从mytable中选择*


从$tableName中选择*

CREATE TABLE $table (
       id INT NOT NULL AUTO_INCREMENT,
       PRIMARY KEY(id),
       col1 INT,
       col2 INT,
--             ^ here
       )

您可能输入了没有大小的VARCHAR字段,例如
fieldname VARCHAR
将返回错误,而应该是
fieldname VARCHAR(100)
?正如Quassnoi所评论的那样,尾随逗号也可能是错误的原因。

如果您试图删除尾随斜杠,也可以使用计数器来完成此操作

$fieldsCount = count($listingFields);
foreach($listingFields as $key => $listing)
{ // create the insert statement (do not add comma at the end)
    $query .=" ".$listing[0];
    if ( $key+1 != $fieldsCount )
    {
        $query .=',';
    }
}

请发布您的完整错误(显然),以及
$sql
var_dump
,您是否意识到根据用户请求创建表是一种极不寻常的做法,通常是一个非常糟糕的主意?我理解这一点。我只是准备了一个数据输入程序供一个人使用。稍后我会努力使它更安全。我确实回显了我的$sql,一切都按它应该的方式进行了。无论如何,我会尝试使用双引号。如果您确实回显了
$sql
,请将其添加到问题k中,并向我们显示输出。我知道后面的逗号可能会有问题,但我不确定如何消除它。我猜是某种if语句,用来表明这是最后一个…?我不确定如何摆脱它,因为我使用的是循环。@user1978550:look up
infrade