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_stringまたはPDO の 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 に答える