Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.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 如何从数组自动创建数据库表_Php_Mysql_Database - Fatal编程技术网

Php 如何从数组自动创建数据库表

Php 如何从数组自动创建数据库表,php,mysql,database,Php,Mysql,Database,我今天很沮丧,想让它工作 我有大约20个表,若它们不存在,那个么需要在php脚本开始时创建它们 最明显的方法是SQL查询CREATE IF NOT EXIST,但是我不想查询数据库20次,只是为了检查它们是否存在,只在我想创建它们的时候 我尝试过在我的表数组中循环,然后使用ShowAll FROM database,然后比较表名,但是这不起作用(我不知道为什么) $result=$db->query(“显示数据库中的表”); $numrows=mysql\u num\u行($result); e

我今天很沮丧,想让它工作

我有大约20个表,若它们不存在,那个么需要在php脚本开始时创建它们

最明显的方法是SQL查询CREATE IF NOT EXIST,但是我不想查询数据库20次,只是为了检查它们是否存在,只在我想创建它们的时候

我尝试过在我的表数组中循环,然后使用ShowAll FROM database,然后比较表名,但是这不起作用(我不知道为什么)

$result=$db->query(“显示数据库中的表”);
$numrows=mysql\u num\u行($result);
echo$numrows.“表”;
$found=null;
foreach($name=>$fields形式的表){
而($showall=mysql\u fetch\u数组($result)){
如果($name==$showall[0]){
未结算(已发现);
}
}
如果(isset($found)){
回显“表”。$name.。不存在,正在创建…
; $db->query(“创建表“$name.”(“$fields”)”); }否则{ 回显“表”。$name。“存在
”; //$db->query(“创建表“$name.”(“$fields”)”); }

到目前为止,这就是我的代码(我想,经过数小时的努力,我的代码是第4版)。如您所见,我在循环中循环,并在找到匹配项时取消设置变量。这听起来很简单,应该可以工作,但实际上不行。

您只声明了$found变量两次,两次都声明为null。因此,您的代码永远不会输入

if (isset($found)) {
                echo 'Table '.$name.' does not exist, creating...<br />';

                $db->query("CREATE TABLE ".$name." (".$fields.")");
            } 
if(isset($found)){
回显“表”。$name.。不存在,正在创建…
; $db->query(“创建表“$name.”(“$fields”)”); }

可能有问题?

是的。但我尝试过将变量设置为1并询问该变量是否已设置。我发布的这个$found示例是第四次尝试的三分之一。
if (isset($found)) {
                echo 'Table '.$name.' does not exist, creating...<br />';

                $db->query("CREATE TABLE ".$name." (".$fields.")");
            }