通过PHP从MySQL数据库中检索行

时间:2012-11-30 19:48:54

标签: php mysql database row

请忍受我,我是新来的 - 我刚刚开始使用PHP。说实话,这是我的第一个项目,所以请怜悯。 :)

    $row = mysql_fetch_array(mysql_query("SELECT message FROM data WHERE code = '". (int) $code ."'         LIMIT 1"));
    echo $row['message'];

这是否足以根据预定义的'$ code'变量从数据库中获取消息?我已经成功连接到数据库。

这段代码似乎什么都没有 - 只是一个空白区域。 :(

我将不胜感激任何建议和帮助。 :)

更新:

现在代码如下:

    <?php
    error_reporting(E_ALL);
   // Start MySQL Connection
    REMOVED FOR SECURITY
    // Check if code exists
    if(mysql_num_rows(mysql_query("SELECT code FROM data WHERE code = '$code'"))){
    echo 'Hooray, that works!';
    $row = mysql_fetch_array(mysql_query("SELECT message FROM data WHERE code = '". (int) $code     ."' LIMIT 1")) or die(mysql_error());
    echo $row['message'];
    }
    else {
    echo 'That code could not be found. Please try again!';
    }
    mysql_close();
    ?>

2 个答案:

答案 0 :(得分:1)

最好不要像这样将函数链接在一起,因为如果查询失败,fetch也会失败并导致错误消息,这可能实际上并不能说明真正的问题是什么。

另外,不要在SQL查询中围绕整数值包装引号。

if(! $rs = mysql_query("SELECT message FROM data WHERE code = ". (int) $code ." LIMIT 1") ) {
    die('query failed! ' . mysql_error());
}
$row = mysql_fetch_array($rs);
echo $row['message'];

标准的“不要使用mysql_*函数,因为弃用了等等等等等等......”

如果您仍然收到空白回复,则可能需要检查是否未返回0行。进一步测试还包括echo查询它是否正确形成,并自行运行以查看它是否返回正确的数据。

答案 1 :(得分:0)

一些意见:

  1. 请勿使用mysql_*。它被弃用了。使用mysqli_*函数或PDO Library
  2. 每当您在查询中输入值(此处为$code)时,请使用mysqli_real_escape_stringPDO's quote函数来阻止SQL注入
  3. 始终检查错误。
  4. 使用PDO的示例:

    //connect to database
    $user = 'dbuser';  //mysql user name
    $pass = 'dbpass';  //mysql password
    $db   = 'dbname';  //name of mysql database
    $dsn = 'mysql:host=localhost;dbname='.$db;
    try {
        $con = new PDO($dsn, $user, $pass);
    } catch (PDOException $e) {
        echo 'Could not connect to database: ' . $e->getMessage();
        die();
    }
    
    //escape code to prevent SQL injection
    $code = $con->quote($code);
    //prepare the SQL string
    $sql = 'SELECT message FROM data WHERE code='.$code.' LIMIT 1';
    //do the sql query
    $res = $con->query($sql);
    if(!$res) {
        echo "something wrong with the query!";
        echo $sql; //for development only; don't output SQL in live server!
        die();
    }
    //get result
    $row = $res->fetch(PDO::FETCH_ASSOC);
    //output result
    print_r($row);