2

ねえ、私のWebサイトにアクセスしようとすると、このエラーが発生します。「SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、1行目の「LIMIT0、10」の近くで使用する正しい構文を確認してください。」

私にとっての1行目は<?php require_once('Connections/blog.php'); ?>

しかし、エラーはここから来ているようです。

$maxRows_getDisplay = 10;
$pageNum_getDisplay = 0;
if (isset($_GET['pageNum_getDisplay'])) {
  $pageNum_getDisplay = $_GET['pageNum_getDisplay'];
}
$startRow_getDisplay = $pageNum_getDisplay * $maxRows_getDisplay;

mysql_select_db($database_blog, $blog);
$query_getDisplay = "SELECT news.title, news.pre,  
 DATE_FORMAT(news.updated, '%M %e, %Y') AS formatted 
 FROM news ORDER BY news.updated DESC LIMIT 2";
$query_limit_getDisplay = sprintf("%s LIMIT %d, %d", 
 $query_getDisplay, $startRow_getDisplay, $maxRows_getDisplay);
$getDisplay = mysql_query($query_limit_getDisplay, $blog) or die(mysql_error());
$row_getDisplay = mysql_fetch_assoc($getDisplay);

ご不明な点がございましたら、完全に迷ってしまいましたので、どうぞよろしくお願いいたします。

4

1 に答える 1

5

2つのLIMIT句を含むSQLステートメントを作成しましたが、これは許可されていません。

この例は、SQL文字列の作成に使用するコードを見つめてSQLをデバッグすることがいかに難しいかを示しています。

最終的なSQL文字列を出力してデバッグできれば、はるかに簡単です。

$query_getDisplay = "SELECT news.title, news.pre,  
 DATE_FORMAT(news.updated, '%M %e, %Y') AS formatted 
 FROM news ORDER BY news.updated DESC LIMIT 2";
$query_limit_getDisplay = sprintf("%s LIMIT %d, %d", 
 $query_getDisplay, $startRow_getDisplay, $maxRows_getDisplay);
error_log("What's wrong with this SQL?  " . $query_limit_getDisplay);
$getDisplay = mysql_query($query_limit_getDisplay, $blog) or die(mysql_error());

エラーログに次のように表示されます。

What's wrong with this SQL?  SELECT news.title, news.pre,  
DATE_FORMAT(news.updated, '%M %e, %Y') AS formatted 
FROM news ORDER BY news.updated DESC LIMIT 2 LIMIT %d, %d

これにより、無効なSQL構文を簡単に見つけることができます(有効なSQL構文と無効なSQL構文を認識できると仮定します)。

于 2012-12-27T01:31:16.103 に答える