Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO SQL插入语法问题_Php_Mysql_Pdo - Fatal编程技术网

Php PDO SQL插入语法问题

Php PDO SQL插入语法问题,php,mysql,pdo,Php,Mysql,Pdo,我试图让我的页面一次将多行插入数据库。所有信息都来自上一页。输入某个坐标后,该行不会保存 测试时,仅Alpha会获得一个与排除的坐标不同的坐标 运行代码时,出现以下错误: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for t

我试图让我的页面一次将多行插入数据库。所有信息都来自上一页。输入某个坐标后,该行不会保存

测试时,仅Alpha会获得一个与排除的坐标不同的坐标

运行代码时,出现以下错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 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 ')' at line 2
这是我的代码:

try {
                        $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password);

                        $dag = mysqli_real_escape_string($conn, $_GET['dag']);
                        $tijd = mysqli_real_escape_string($conn, $_GET['tijd']);

                        $wgs_coordinaat_x_alpha = mysqli_real_escape_string($conn, $_GET["x_alpha"]);
                        $wgs_coordinaat_y_alpha = mysqli_real_escape_string($conn, $_GET["y_alpha"]);
                        $wgs_coordinaat_x_bravo = mysqli_real_escape_string($conn, $_GET["x_bravo"]);
                        $wgs_coordinaat_y_bravo = mysqli_real_escape_string($conn, $_GET["y_bravo"]);
                        $wgs_coordinaat_x_charlie = mysqli_real_escape_string($conn, $_GET["x_charlie"]);
                        $wgs_coordinaat_y_charlie = mysqli_real_escape_string($conn, $_GET["y_charlie"]);
                        $wgs_coordinaat_x_delta = mysqli_real_escape_string($conn, $_GET["x_delta"]);
                        $wgs_coordinaat_y_delta = mysqli_real_escape_string($conn, $_GET["y_delta"]);
                        $wgs_coordinaat_x_echo = mysqli_real_escape_string($conn, $_GET["x_echo"]);
                        $wgs_coordinaat_y_echo = mysqli_real_escape_string($conn, $_GET["y_echo"]);
                        $wgs_coordinaat_x_foxtrot = mysqli_real_escape_string($conn, $_GET["x_foxtrot"]);
                        $wgs_coordinaat_y_foxtrot = mysqli_real_escape_string($conn, $_GET["y_foxtrot"]);

                        // set the PDO error mode to exception
                        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                        // begin the transaction
                        $conn->beginTransaction();
                        // our SQL statements
                        if ($wgs_coordinaat_x_alpha == "47.9747674834") {}
                            else {
                                $conn->exec("INSERT INTO markers (id, type, dag, tijd, deelgebied, lat, lng) 
                                VALUES (NULL, 'Hint', '$dag', '$tijd', 'Alpha', '$wgs_coordinaat_x_alpha', '$wgs_coordinaat_y_alpha')");
                            }
                        if ($wgs_coordinaat_x_bravo == "47.9747674834") {}
                            else {
                                $conn->exec("INSERT INTO markers (id, type, dag, tijd, deelgebied, lat, lng) 
                                VALUES (NULL, 'Hint', '$dag', '$tijd', 'Bravo', '$wgs_coordinaat_x_bravo', '$wgs_coordinaat_y_bravo'))");
                            }
                        if ($wgs_coordinaat_x_charlie == "47.9747674834") {}
                            else {
                                $conn->exec("INSERT INTO markers (id, type, dag, tijd, deelgebied, lat, lng) 
                                VALUES (NULL, 'Hint', '$dag', '$tijd', 'Charlie', '$wgs_coordinaat_x_charlie', '$wgs_coordinaat_y_charlie')");
                            }
                        if ($wgs_coordinaat_x_delta == "47.9747674834") {}
                            else {
                                $conn->exec("INSERT INTO markers (id, type, dag, tijd, deelgebied, lat, lng) 
                                VALUES (NULL, 'Hint', '$dag', '$tijd', 'Delta', '$wgs_coordinaat_x_delta', '$wgs_coordinaat_y_delta')");
                            }
                        if ($wgs_coordinaat_x_echo == "47.9747674834") {}
                            else {
                                $conn->exec("INSERT INTO markers (id, type, dag, tijd, deelgebied, lat, lng) 
                                VALUES (NULL, 'Hint', '$dag', '$tijd', 'Echo', '$wgs_coordinaat_x_echo', '$wgs_coordinaat_y_echo')");
                            }
                        if ($wgs_coordinaat_x_foxtrot == "47.9747674834") {}
                            else {
                                $conn->exec("INSERT INTO markers (id, type, dag, tijd, deelgebied, lat, lng) 
                                VALUES (NULL, 'Hint', '$dag', '$tijd', 'Foxtrot', '$wgs_coordinaat_x_foxtrot', '$wgs_coordinaat_y_foxtrot')");
                            }   
                        // commit the transaction
                        $conn->commit();
                        echo "Hint succesvol toegevoegd!";
                        }
                    catch(PDOException $e)
                        {
                        // roll back the transaction if something failed
                        $conn->rollback();
                        echo "Opes! Iets is fout gegaan: " . $e->getMessage();
                        }

                    $conn = null;

我没有主意了。谢谢

此行中的双括号:

VALUES (NULL, 'Hint', '$dag', '$tijd', 'Bravo', '$wgs_coordinaat_x_bravo', '$wgs_coordinaat_y_bravo'))");
线上的双闭合支架:

VALUES (NULL, 'Hint', '$dag', '$tijd', 'Bravo', '$wgs_coordinaat_x_bravo', '$wgs_coordinaat_y_bravo'))");

我将您的if语句切换为使用
=这样我们就去掉了额外的
else
语句。此外,由于所有语句中的CODRD(<代码> 47.9747674834)/代码>都相同,所以考虑将其缓存在变量中。

正如其他人所陈述的,在插入Bravo坐标的行中,在SQL上有两个闭锁圆括号。 但我必须对其他一些与语法错误无关的最佳实践进行评论

您应该使用查询参数,而不是在SQL字符串中插入变量。这更简单、更安全,因为它可以帮助您避免像以前那样的语法错误

此外,还将mysqli函数与PDO混合使用

下面是我如何编写此代码:

try {
    $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password);

    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   if (isset($_GET['dag']) {
       $dag = $_GET['dag'];
   } else {
       die("dag is verplicht");
   }
   if (isset($_GET['tijd']) {
       $tijd = $_GET['tijd'];
   } else {
       die("tijd is verplicht");
   }

    // begin the transaction
    $conn->beginTransaction();

    // our SQL statements
    $stmt = $conn->prepare("INSERT INTO markers
        SET type='Hint', dag=:dag, tijd=:tijd, deelgebied='Alpha', lat=:lat, lng=:lng");

    foreach (['alpha', 'bravo', 'charlie', 'delta', 'echo', 'foxtrot'] as $coord) {

        if (isset($_GET["x_$coord"]) && $_GET["x_$coord"] != "47.9747674834") {
            $stmt->execute([
                'dag'=>$dag,
                'tijd'=>$tijd,
                'lat'=>$_GET["x_$coord"],
                'lng'=>$_GET["y_$coord"]
            ]);
        }
    }

    // commit the transaction
    $conn->commit();
    echo "Hint succesvol toegevoegd!";
}
catch(PDOException $e)
{
    // roll back the transaction if something failed
    $conn->rollback();
    echo "Opes! Iets is fout gegaan: " . $e->getMessage();
}

$conn = null;

此语句
$conn->exec(“插入标记(id、类型、dag、tijd、deelgebied、lat、lng)值(NULL、'Hint'、'dag'、'tijd'、'Bravo'、'wgs_Coordinat_x_Bravo'、'wgs_Coordinat_y_Bravo')
看起来有一个额外的
。谢谢你的建议。使用!=将使代码更高效,并将缓存放置在坐标上是有意义的。此解决方案有效吗?是的。主要问题是双括号。我完全专注于Alpha语句,我没有注意到我在代码后面的错误。如果你能投票并接受正确答案,那就太好了。
try {
    $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password);

    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   if (isset($_GET['dag']) {
       $dag = $_GET['dag'];
   } else {
       die("dag is verplicht");
   }
   if (isset($_GET['tijd']) {
       $tijd = $_GET['tijd'];
   } else {
       die("tijd is verplicht");
   }

    // begin the transaction
    $conn->beginTransaction();

    // our SQL statements
    $stmt = $conn->prepare("INSERT INTO markers
        SET type='Hint', dag=:dag, tijd=:tijd, deelgebied='Alpha', lat=:lat, lng=:lng");

    foreach (['alpha', 'bravo', 'charlie', 'delta', 'echo', 'foxtrot'] as $coord) {

        if (isset($_GET["x_$coord"]) && $_GET["x_$coord"] != "47.9747674834") {
            $stmt->execute([
                'dag'=>$dag,
                'tijd'=>$tijd,
                'lat'=>$_GET["x_$coord"],
                'lng'=>$_GET["y_$coord"]
            ]);
        }
    }

    // commit the transaction
    $conn->commit();
    echo "Hint succesvol toegevoegd!";
}
catch(PDOException $e)
{
    // roll back the transaction if something failed
    $conn->rollback();
    echo "Opes! Iets is fout gegaan: " . $e->getMessage();
}

$conn = null;