3

请多多包涵,我是新来的——我刚刚开始使用 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();
    ?>
4

2 回答 2

1

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

此外,不要在 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查询查询以查看它是否正确形成,并自己运行它以查看它是否返回正确的数据。

于 2012-11-30T19:57:42.410 回答
0

一些评论:

  1. 不要使用mysql_*. 它已被弃用。使用mysqli_*函数或PDO 库
  2. 每当您在查询中输入值(此处为$code)时,请使用mysqli_real_escape_stringPDO 的 quote函数来防止 SQL 注入
  3. 始终检查错误。

使用 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);
于 2012-11-30T20:00:35.193 回答