【问题标题】:check the manual that corresponds to your MariaDB server version for the right syntax to use near '"Array" SQL查看与您的 MariaDB 服务器版本相对应的手册,了解在“数组”SQL 附近使用的正确语法
【发布时间】:2017-12-30 09:02:03
【问题描述】:

注意:这个问题是根据我上一个问题here

下面的 SQL 语法有什么问题?

$sql = "ALTER TABLE products ADD ".$supplier_name_ . $p." varchar(500) AFTER supplier_info_1";

它正在产生以下错误:

您的 SQL 语法有误;检查与您的 MariaDB 服务器版本相对应的手册,以了解要使用的正确语法 在第 1 行的 '"Array" varchar(500) AFTER supply_info_1' 附近

更新:

supplier_name_ . $p 来自这个 for 循环:

// supplier info
    $supplier_name_1 = $_POST['supplier_name_1'];
    $supplier_sending_1 = $_POST['supplier_sending_1'];
    $supplier_guarantee_1 = $_POST['supplier_guarantee_1'];
    $supplier_price_1 = $_POST['supplier_price_1'];
    $supplier_colors_1 = $_POST['supplier_colors_1'];
    $supplier_info_1 = array($supplier_name_1, $supplier_sending_1, $supplier_guarantee_1, $supplier_price_1, $supplier_colors_1);
    $proSupply_1 = json_encode($supplier_info_1);

    for($p=2;$p<=5;$p++){
        $supplier_name_ . $p = $_POST['supplier_name_'.$p.''];
        $supplier_sending_ . $p = $_POST['supplier_sending_'.$p.''];
        $supplier_guarantee_ . $p = $_POST['supplier_guarantee_'.$p.''];
        $supplier_price_ . $p = $_POST['supplier_price_'.$p.''];
        $supplier_colors_ . $p = $_POST['supplier_colors_'.$p.''];
        $supplier_info_ . $p = array($supplier_name_ . $p, $supplier_sending_ . $p, $supplier_guarantee_ . $p, $supplier_price_ . $p, $supplier_colors_ . $p);
        $proSupply_ . $p = json_encode($supplier_info_ . $p);

        if(!empty($supplier_name_ . $p)&&(!empty($supplier_sending_ . $p))&&(!empty($supplier_guarantee_ . $p))&&(!empty($supplier_price_ . $p))&&(!empty($supplier_colors_ . $p))){
            $sql = "ALTER TABLE products ADD '.$supplier_name_ . $p.' varchar(500) AFTER supplier_info_1";
            if ($con->query($sql) === TRUE){
                $insert_suppliers = "
                INSERT INTO `products` (`supplier_info_" . $p . "`) 
                VALUES ('$proSupply_" . $p . "')
                ";
                $run_suppliers = mysqli_query($con,$insert_suppliers);
                if(!$run_product){
                    error_reporting(E_ALL);
                    die(mysqli_error($con));
                }
            }else{
                error_reporting(E_ALL);
                die(mysqli_error($con));
            }
        }
    }

【问题讨论】:

  • 将 '.$supplier_name_ 处的双引号改为单引号。 $p.'
  • @Deep 你介意看看我添加的更新。根据我的最后一个问题,您已经访问过它。
  • 尝试在 'supplier_info_1' 周围加上单引号

标签: php mysql sql mysqli


【解决方案1】:

MariaDB 中的 ADD COLUMN 仅适用于添加的列最后出现在表中的情况。更多详情请查看手册link

因为在您的代码中,您每次都在“supplier_info_1”之后插入/创建新列。这是错误的原因。

您应该使该列动态化。

if($p == 2){
  $sql = "ALTER TABLE products ADD '.$supplier_name_ . $p.' varchar(500) AFTER supplier_info_1";
} else if($p > 2) {
  $i = $p-1;
  $sql = "ALTER TABLE products ADD '.$supplier_name_ . $p.' varchar(500) AFTER supplier_info_".$i;
 }

【讨论】:

  • 那么如何让它动态
  • 我试过了,它返回:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '-1' at line 1
  • 感谢您的回答,但另一个错误:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''. . "Array".' varchar(500) AFTER supplier_info_-1' at line 1
  • 好吧,我的声望已经这么多了(至少需要 15 个声望!)......对不起
  • 朋友,如果你喜欢这个话题的新挑战,我发了一个新的here
【解决方案2】:

问题在于你的语法

$sql = "ALTER TABLE products ADD '.$supplier_name_ . $p.' varchar(500) AFTER supplier_info_1";

我看到您使用 for 循环在表中添加表字段并在 SQL 查询中使用 AFTER supplier_info_1"

supplier_info_1" 之后插入字段后,将更改为更新的字段。

所以解决方案是获取最后一个输入字段并在此处打印。

希望对你有帮助!

【讨论】:

  • 仍然出现错误。我还添加了一个更新。请检查一下...谢谢!
猜你喜欢
  • 2018-08-28
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
相关资源
最近更新 更多