【问题标题】:Create mysql table with php variable not working用php变量创建mysql表不起作用
【发布时间】:2012-10-21 17:28:49
【问题描述】:

我对 php 很陌生。这可能是一个愚蠢的错误...但我不知道发生了什么。我正在尝试使用 php 在我的数据库中创建一个表。我想在用户名之后命名表。我正在使用变量$tableusername。这是我的代码

$sql="SELECT * FROM userdata WHERE username='$username'";
$result=mysql_query($sql);

while ($row = mysql_fetch_assoc($result))
        {
            $tableusername = $row["username"];
        }

$create = "CREATE TABLE `".$tableusername."` ('
    . ' `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, '
    . ' `please` VARCHAR(50) NOT NULL, '
    . ' `make` VARCHAR(50) NOT NULL, '
    . ' `this` VARCHAR(50) NOT NULL, '
    . ' `work` VARCHAR(50) NOT NULL'
    . ' )'
    . ' ENGINE = myisam;";

mysql_query($create)


?>

<html>
<head>
</head>
<body>
You have successfully signed up. <?php echo $tableusername ?>
</body>
</html>

所以- 这将创建一个名为 $tableusername 的表。变量不会结转。但是 - 当我 echo $tableusername - 变量结转。我对此很陌生 - 所以任何帮助表示赞赏。

【问题讨论】:

标签: php mysql


【解决方案1】:

在你的 SQL 查询之后添加这个 - (它确实有助于并加快纠错时间)

or die("A MySQL error has occurred.<br />Error: (" . mysql_errno() . ") " . mysql_error());
在您的实例中

回声

发生了 MySQL 错误。 错误:(1064) 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '' 附近使用的正确语法。 ' ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, ' . 'pleaseVARCH' 在第 1 行

这向我表明该错误与 "' 有关。


将代码更改为包含单引号并执行后,现在没有回显。

   <?php
    $tableusername = "philip";
    $create = "CREATE TABLE `".$tableusername."` ("
        . " `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
        . " `please` VARCHAR(50) NOT NULL, "
        . " `make` VARCHAR(50) NOT NULL, "
        . " `this` VARCHAR(50) NOT NULL, "
        . " `work` VARCHAR(50) NOT NULL"
        . " )"
        . " ENGINE = myisam;";

    mysql_query($create)or die("A MySQL error has occurred.<br />Error: (" . mysql_errno() . ") " . mysql_error());

    ?>

注意:使用 PHP 中嵌入的 SQL 时,请参考 MySQLi 扩展名。 mysql_* 正在弃用过程中。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您的字符串连接无效,请使用double quotes 而不是single quotes

    $create = "CREATE TABLE `".$tableusername."` ("
        . " `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
        . " `please` VARCHAR(50) NOT NULL, "
        . " `make` VARCHAR(50) NOT NULL, "
        . " `this` VARCHAR(50) NOT NULL, "
        . " `work` VARCHAR(50) NOT NULL' "
        . " )"
        . " ENGINE = myisam;";
    

    【讨论】:

    • 你说使用双引号而不是单引号有什么特别的原因,而不仅仅是确保它们匹配?
    • @WaleedKhan 看上面问题中的代码,字符串里面包含了单引号。
    • 我的意思是说,如果使用单引号而不是双引号,它会同样有效。我只是想知道你为什么选择一个而不是另一个。
    【解决方案3】:

    //用变量创建MySql表

    $tableName = "tb-"."$userEmail";
    $tName="Beta";  
    $createTable = "CREATE TABLE ".$tName." ( UserName varchar(30), UserPassword varchar(30) )" ;
    

    上面的语法有效。将此示例应用于您的代码。 请检查您的连接中的一些错误

    【讨论】:

      【解决方案4】:

      使用heredoc

      $create = <<<SQL
      CREATE TABLE `$tableusername` (
          `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
          `please` VARCHAR(50) NOT NULL,
          `make` VARCHAR(50) NOT NULL,
          `this` VARCHAR(50) NOT NULL,
          `work` VARCHAR(50) NOT NULL
      )
      ENGINE = myisam;
      SQL;
      

      值得注意的是,您可以在 heredoc 中使用字符串插值,但您应该更倾向于参数化查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-20
        • 2012-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-26
        相关资源
        最近更新 更多