【问题标题】:Wordpress php SELECT probable syntax errorWordpress php SELECT 可能的语法错误
【发布时间】:2018-03-19 22:18:29
【问题描述】:

所以,我从一个表单中得到这个字段的帖子

$OrderLNumber = $_POST['OrderLNumber'];

当我使用 Echo 进行检查时,它运行良好。 然后我将我的数据库与经典连接:

// Database Connection String
                $con = mysql_connect($db_hostname,$db_username,$db_password);
                if (!$con)
                {
                die('Could not connect: ' . mysql_error());
                }

                mysql_select_db($db_database, $con);

这很有效,因为页面实际上正在加载。当我弄乱代码的这一面时,页面不会加载。
然后我实际上是在尝试获取 SELECT FROM WHERE 并打印结果行。我不知道我在这部分代码中犯了什么样的错误:

$sql = "SELECT * FROM OrderStatus WHERE OrderLineNumber = $OrderLNumber "; 
                $result = mysql_query($con,$sql); 
                if (mysql_num_rows($result) > 0) {  

                while ($row = mysql_fetch_array($result)){  
                        echo 'OrderLineNumber: ' .$row['OrderLineNumber'];  
                        echo 'Date Started: ' .$row['DateStarted'];  
                        echo 'Status: '.$row['Status'];  

                        }  

                    }

我不明白这是语法错误、服务器端错误还是逻辑错误。
非常感谢您。

更新(这应该有效吗?)

<?php

if($_POST['submit']) {

                    $OrderLNumber = $_POST['OrderLNumber'];
                    $results = $wpdb->get_results(  
                                "
                                SELECT * FROM $wpdb->OrderStatus WHERE OrderLineNumber = $OrderLNumber
                                "
                                );
                    foreach ($results as $result)
                    {
                        echo $result;
                    }
                        }
        else { 


        ?>

【问题讨论】:

  • 您很容易受到 SQL 注入 - 请停止使用 mysql_,因为它已被弃用。请改用 mysqli_ 或 PDO。
  • @Edward 这是 WordPress,所以 WPDB 就是答案。
  • 警告:通过将$_GET 数据直接放入查询中,您创建了一个危险的SQL injection bug永远不要这样做。相反,请使用 WordPress prepared statements feature 正确转义所有数据参数。 请勿在 WordPress 代码中使用 mysql_query,它已从 PHP 7 中删除,因为它非常危险。
  • 使用 WPDB 进行任何和所有数据库交互。 WordPress 已经知道如何连接到您的数据库并通过该接口运行查询。我已在第一条评论中链接到文档。
  • 更接近,但在编写查询时要非常小心,不要放入$OrderNumber之类的东西,这会产生SQL注入问题。而是输入?,并在执行时使用绑定功能添加数据。

标签: php mysql sql wordpress phpmyadmin


【解决方案1】:

试试这个代码。

<?php

    if($_POST['submit']) {

        global $wpdb;

        $OrderLNumber = $_POST['OrderLNumber'];

        $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}OrderStatus WHERE OrderLineNumber = $OrderLNumber");

        foreach ($results as $result)
        {
        echo $result;
        }
    }
?>

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2014-03-12
    • 2023-04-06
    • 2012-09-09
    相关资源
    最近更新 更多