PHP MySQL语句什么都不返回?

时间:2013-03-01 14:08:39

标签: php mysql sql

我目前正在开发一个应用程序,它将通过我编写的PHP服务与数据库进行通信。

我遇到问题的服务是应该根据用户的搜索字符串在表中查找一行或多行。

以下PHP旨在通过“name”变量接收GET请求,该变量将是SQL查询使用的数据。我看不出我的代码有什么问题,但搜索返回的行总是为0。

// checks for the post data
if (isset($_GET["name"])) {
    $name = '%' . $_GET['name'] . '%';

    // get a list of products from the database
    $result = mysql_query("SELECT * FROM products WHERE name LIKE $name");

    if (!empty($result)) {
        // check for empty result
        if (mysql_num_rows($result) > 0) {

            $result = mysql_fetch_array($result);

            $products = array();
            $products["id"] = $row["id"];
            $products["name"] = $row["name"];
            $products["type"] = $row["type"];
            $products["price"] = $row["price"];
            $products["photo"] = $row["photo"];
            // success
            $response["success"] = 1;

            // products node
            $response["products"] = array();

            array_push($response["products"], $products);

            // echoing JSON response
            echo json_encode($response);
        } else {
            // no products found
            $response["success"] = 0;
            $response["message"] = "No products found";

            // echo no products JSON
            echo json_encode($response);
        }
    } else {
        // no products found
        $response["success"] = 0;
        $response["message"] = "Search Complete... No products found";

        // echo no products JSON
        echo json_encode($response);
    }
} else {
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);
}

我在它正在查看的表中有一个条目并且名称为“crisps”,所以当我发送一个带有“cr”数据的get请求时,我希望在结果中看到该条目,但是它返回0行。

然后甚至更奇怪的是,当我直接对我的数据库运行下面的SQL时,它实际上会拉回正确的记录。

SELECT * FROM products WHERE name LIKE "%cr%"

任何想法??

2 个答案:

答案 0 :(得分:1)

在您的查询中,您需要将引号'添加到'$name'

  $result = mysql_query("SELECT * FROM products WHERE name LIKE '$name'");

答案 1 :(得分:1)

因为你没有用单引号包装值,所以请记住它是一个字符串文字。

SELECT * FROM products WHERE name LIKE '$name'

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。