【问题标题】:Creating MySQL table with PHP foreach loop - error with syntax使用 PHP foreach 循环创建 MySQL 表 - 语法错误
【发布时间】:2018-08-06 16:24:23
【问题描述】:

建立我自己的电子商务网站并在后端创建了一个表单,管理员可以在其中创建某些产品过滤器组(例如颜色)。

当我尝试将新表插入数据库时​​,我使用 foreach 循环确保没有插入空白条目(并防止这些空白条目导致问题)。

但是我遇到了一个语法问题,我已经对此进行了全面的研究,但没有任何成功。

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“entry_date DEFAULT CURRENT_TIMESTAMP)”附近使用正确的语法

我的代码:

// GROUP NAME PROVIDED

$group_name = $_POST['g_name'];

// FILTER OPTIONS PROVIDED

$filter_1 = $_POST['filter_1'];
$filter_2 = $_POST['filter_2'];
$filter_3 = $_POST['filter_3'];
$filter_4 = $_POST['filter_4'];
$filter_5 = $_POST['filter_5'];
$filter_6 = $_POST['filter_6'];
$filter_7 = $_POST['filter_7'];
$filter_8 = $_POST['filter_8'];
$filter_9 = $_POST['filter_9'];
$filter_10 = $_POST['filter_10'];
$filter_11 = $_POST['filter_11'];

include '../connection.php';

$query = "CREATE TABLE $group_name (
entry_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
product_id VARCHAR(255) NOT NULL,";

$newarray = array($filter_1,$filter_2,$filter_3,$filter_4,$filter_5,$filter_6,$filter_7,$filter_8,$filter_9,$filter_10,$filter_11);

    // For each value that is not NULL
    foreach ($newarray as $key => $value) {
        if (is_null($value) === false) {
            $new_array[$key] = $value;
            echo $value;

           $query = "$value VARCHAR(255) NOT NULL,";

        }

    }

$query= "entry_date DEFAULT CURRENT_TIMESTAMP)";

// Checking if query was successful or not

if (mysqli_query($connection, $query )) {
    echo "Table created successfully";
} else {
    echo "Error creating table: " . mysqli_error($connection);
}

mysqli_close($connection);

我尝试了时间戳插入的不同变体,但没有成功。

值得注意的是,我还拆分了我的查询,以便可以包含 foreach 循环。

任何帮助将不胜感激!

P.S 我知道此代码对 SQL 注入开放,我希望在确保其安全之前使其正常运行!

谢谢。 斯坦。

工作代码:

// GROUP NAME PROVIDED

$group_name = $_POST['g_name'];

// FILTER OPTIONS PROVIDED

$filter_1 = $_POST['filter_1'];
$filter_2 = $_POST['filter_2'];
$filter_3 = $_POST['filter_3'];
$filter_4 = $_POST['filter_4'];
$filter_5 = $_POST['filter_5'];
$filter_6 = $_POST['filter_6'];
$filter_7 = $_POST['filter_7'];
$filter_8 = $_POST['filter_8'];
$filter_9 = $_POST['filter_9'];
$filter_10 = $_POST['filter_10'];
$filter_11 = $_POST['filter_11'];

include '../connection.php';

$query = "CREATE TABLE $group_name (
entry_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
product_id VARCHAR(255) NOT NULL,";

$newarray = array($filter_1,$filter_2,$filter_3,$filter_4,$filter_5,$filter_6,$filter_7,$filter_8,$filter_9,$filter_10,$filter_11);

$filtered_array = array_filter($newarray);

    // For each value that is not NULL
    foreach ($filtered_array as $key => $value) {

            $filtered_array[$key] = $value;
            echo $value;

           $query .= "$value VARCHAR(255) NOT NULL,";       


    }

$query .= "entry_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP)";

echo "<br><br>".$query;

// Checking if query was successful or not

if (mysqli_query($connection, $query )) {
    echo "Table created successfully";
} else {
    echo "Error creating table: " . mysqli_error($connection);
}

mysqli_close($connection);

【问题讨论】:

  • $query= "entry_date DEFAULT CURRENT_TIMESTAMP)"; => $query .= "entry_date DEFAULT CURRENT_TIMESTAMP)"; 只是在这里少了一个点,也可能在循环内。
  • 能否请您打印出 SQL 语句(可能在您的错误处理程序中)?
  • 啊,所以似乎 for each 循环无法正常运行,因为仍然出现空白条目:CREATE TABLE 颜色(entry_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,product_name VARCHAR(255)NOT NULL,product_id VARCHAR( 255)非空值,红色VARCHAR(255)非空值,蓝色VARCHAR(255)非空值,绿色VARCHAR(255)非空值,VARCHAR(255)非空值,VARCHAR(255)非空值,VARCHAR(255)非空值, VARCHAR(255) NOT NULL, VARCHAR(255) NOT NULL, VARCHAR(255) NOT NULL, VARCHAR(255) NOT NULL, VARCHAR(255) NOT NULL,entry_date DEFAULT CURRENT_TIMESTAMP)
  • 我已经修复了 for each 循环,首先使用 $filtered_array = array_filter($newarray); 过滤数组但我仍然遇到语法问题,这与“DEFAULT CURRENT_TIMESTAMP”有关吗??
  • 您能否用最新版本的代码和 $query 的内容更新问题?

标签: php mysql foreach


【解决方案1】:

您缺少类型:

entry_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP

entry_date DATETIME DEFAULT CURRENT_TIMESTAMP

【讨论】:

  • 这是导致问题的原因,我更新了代码,现在它创建了表格。谢谢菲利普!
【解决方案2】:

你覆盖你的变量 $query

使用=。如果你想在一个字符串中累积数据

$query =. "entry_date DEFAULT CURRENT_TIMESTAMP)";

购买方式这样存放它不是一个很好的风格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2014-04-09
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    相关资源
    最近更新 更多