Php 检查与您的MariaDB服务器版本相对应的手册,以了解使用near'&引用;数组";SQL

Php 检查与您的MariaDB服务器版本相对应的手册,以了解使用near'&引用;数组";SQL,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,注意:这个问题是根据我的最后一个问题提出的 下面的SQL语法有什么问题 $sql = "ALTER TABLE products ADD ".$supplier_name_ . $p." varchar(500) AFTER supplier_info_1"; 它产生以下错误: 您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解要使用的正确语法 第1行供应商信息1后的“数组”varchar(500)附近 更新: 供应商名称$p来自此for循环: // supplier

注意:这个问题是根据我的最后一个问题提出的

下面的SQL语法有什么问题

$sql = "ALTER TABLE products ADD ".$supplier_name_ . $p." varchar(500) AFTER supplier_info_1";
它产生以下错误:

您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解要使用的正确语法 第1行供应商信息1后的“数组”varchar(500)附近

更新:

供应商名称$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_1=$u POST['supplier_name_1'];
$supplier_sending_1=$u POST['supplier_sending_1'];
$supplier_guarance_1=$u POST['supplier_guarance_1'];
$supplier_price_1=$u POST['supplier_price_1'];
$supplier_colors_1=$_POST['supplier_colors_1'];
$supplier\u info\u 1=数组($supplier\u name\u 1、$supplier\u sending\u 1、$supplier\u guaranty\u 1、$supplier\u price\u 1、$supplier\u colors\u 1);
$proSupply\u 1=json\u encode($supplier\u info\u 1);
对于($p=2;$pquery($sql)==TRUE){
$insert_供应商=”
插入“产品”(“供应商信息”。$p.”)
值(“$proSupply”.“$p.”)
";
$run\u suppliers=mysqli\u query($con,$insert\u suppliers);
如果(!$run\u产品){
错误报告(E_全部);
die(mysqli_错误($con));
}
}否则{
错误报告(E_全部);
die(mysqli_错误($con));
}
}
}

问题在于语法

$sql = "ALTER TABLE products ADD '.$supplier_name_ . $p.' varchar(500) AFTER supplier_info_1";
我看到您在表中使用for循环来添加表字段,并在SQL查询中使用AFTER
supplier\u info\u 1“

一旦在
供应商信息\u 1”之后插入字段,
将更改为更新字段

因此,解决方案是获取最后一个enter字段并在此处打印它


我希望有帮助

此处的
MariaDB
ADD COLUMN仅在添加的列最后出现在表中时适用。有关这方面的更多详细信息,请查看手册

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

您应该使该列成为动态的

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;
 }

在“.$supplier\u name\u”处将双引号更改为单引号$p、 “@Deep你介意看看我添加的更新吗。根据我的上一个问题,您已经访问了它。请尝试在“供应商信息1”周围加上单引号,错误仍然存在。我还添加了一个更新。请检查一下。。。谢谢然后如何使其动态化我尝试了它,它返回:
您的SQL语法中有一个错误;检查与您的MariaDB服务器版本相对应的手册,以了解在第1行的“1”附近使用的正确语法
谢谢您的回答,但另一个错误是:
您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以获取在“”附近使用的正确语法。“数组”。“varchar(500)在第1行的供应商信息之后”
好吧,我的声誉还是那么高(至少需要15个声誉!)。。。对不起,我的朋友,如果你喜欢这个话题的新挑战,我发布了一个新的。