2

这是我正在使用的 PHP 代码:

    $query="select * from `myTable` where `email`='$email' limit 0,1";
    if(empty($conn))
    {
        echo "not connected".PHP_EOL;
    } 

    $result = mysql_query($query,$conn);
    $row = mysql_fetch_array($result);      

    if(empty($row))
    {   
            ....

在 phpmyadmin 中执行查询时,我选择了一行。

但是,当我在 php 中执行代码时,该行始终为空。

我尝试执行的其他几个查询也是如此。mysql_query总是失败。

有什么问题?

4

3 回答 3

2

我觉得没有足够的代码来查看发生了什么。但是根据您向我们展示的内容,在您获得 $result 并将其分配给 $row 之后,您就有了一个 if 语句

if(empty($row)) {...doing something secret...}

这意味着如果返回的内容与您期望的行一样,则不会发生任何事情,因为 (empty($row)) 将是错误的并且不会执行。

于 2012-06-26T16:05:07.400 回答
1

尝试使用 PDO:

<?php

$email = "example@example.com";

try {
    //Instantiate PDO connection
    $conn = new PDO("mysql:host=localhost;dbname=db_name", "user", "pass");
    //Make PDO errors to throw exceptions, which are easier to handle
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //Make PDO to not emulate prepares, which adds to security
    $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $query = <<<MySQL
SELECT *
  FROM `myTable` 
  WHERE `email`=:email 
  LIMIT 0,1;
MySQL;

    //Prepare the statement
    $stmt = $conn->prepare($query);
    $stmt->bindParam(":email", $email, PDO::PARAM_STR);

    $stmt->execute();

    //Work with results
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        //Do stuff with $row
    }
}
catch (PDOException $e) {
    //Catch any PDOExceptions errors that were thrown during the operation
    die("An error has occurred in the database: " . $e->getMessage());
}

强烈建议不要使用mysql_*函数。这是产生损坏代码的保证。请从我给您的评论中的链接中学习 PDO 或 MySQLi,并改用它们。

于 2012-06-26T16:08:23.407 回答
0

首先,确认$email的值。在定义之前回显它$query以确保它是您认为的那样。

如果您已经这样做了,那么您就知道这就是问题所在——相反,您的链接标识符很可能$conn是问题所在。尝试将查询的第二个参数留空,而不是使用链接标识符,而是mysql_connect()在脚本的开头运行。这是 99.5% 的时间做事的最佳方式。

见: http: //php.net/manual/en/function.mysql-connect.php

于 2012-06-26T16:01:30.243 回答