在 PHP 中同时使用插入和创建查询


using insert and create query simultaneously in php

    <?php
$uname = $_POST['uservalue'];
$tblname="student".$uname;
$sql = "CREATE TABLE '$tblname' (col1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, col2 VARCHAR(100) NOT NULL,  col3 TEXT NOT NULL, col4 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP) ENGINE = MyISAM";
mysql_query($sql);

mysql_query("INSERT INTO table2 (col1, col2, col3) VALUES ('value1', 'value2', 'value3')");

?>

我想创建一个表,其中使用表单接受用户的表表名称,并同时在另一个表中插入一些值。我已经尝试了上面的 php 脚本来这样做。插入查询工作正常,但不知道创建表查询有什么问题,表不是在数据库中创建的。任何帮助将不胜感激。提前谢谢。

查看函数的文档 mysql_query: http://us3.php.net/mysql_query

让我们忽略它目前已弃用的事实。

确保始终获取返回值(布尔值(并检查它是否成功(true(。

如果你得到假,那么你可以用mysql_error找出错误是什么。

试试这个,如果错误不明显,请回来。

当然,还有一个事实是,您也没有正确地将SQL语句连接在一起。

尝试通过查看函数返回的内容以及错误消息(如果有(来解决问题。代码如下。先提几点建议:

  1. 你不需要$tblname周围的报价。
  2. col1被声明为整数类型,但您正在馈送一个字符串'value1'(尽管这会带有警告(。
  3. 不要使用 mysql_* 函数(它们已弃用且不安全(。请改用mysqli_*函数。

此外,您用于创建的表名$tblname"student".$uname但您用来插入的表名是 table2

所以,这是代码:

<?php
  $uname = $_POST['uservalue'];
  $tblname = "student".$uname;
  $sql1 = "CREATE TABLE $tblname (col1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, col2 VARCHAR(100) NOT NULL,  col3 TEXT NOT NULL, col4 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP) ENGINE = MyISAM";
  $sql2 = "INSERT INTO $tblname (col1, col2, col3) VALUES ('value1', 'value2', 'value3')";
  //$conn stands for the connection reference of the mysql connection
  if(!mysqli_query($conn, $sql1))
     echo mysqli_error($conn);
  if(!mysqli_query($conn, $sql2))
     echo mysqli_error($conn);
?>

首先 - 这可能只是大纲代码,但请确保在数据库查询中使用它们时从 $_POST 或 $_GET 数组中获取的任何变量进行转义。特别是如果根据发布的数据创建表。SQL注入非常重要 - 这个网站上有很多很好的教程和其他帖子。

我建议您的mysql用户可能对数据库没有"创建"权限-您是否检查过?

如果做不到这一点,您可能会收到从 mysql 返回的错误 - 您应该在 PHP 中进行一些错误处理,但作为快速测试,您可以回显出 $sql 变量并尝试在 phpmyadmin 或 mysql 命令行中手动运行它以跟踪您的错误。

尝试从以下位置修改创建 SQL:

$sql = "CREATE TABLE '$tblname' (col1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, col2 VARCHAR(100) NOT NULL,  col3 TEXT NOT NULL, col4 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP) ENGINE = MyISAM";

自:

$sql = "CREATE TABLE '".$tblname."' (col1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, col2 VARCHAR(100) NOT NULL,  col3 TEXT NOT NULL, col4 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP) ENGINE = MyISAM";

这有什么区别吗?(就算是这样,也应该看逃跑(