2016-06-27 15 views
0

私のウェブサイトではphpmyadminのウェブサイト上でうまく動作しているようですSQLSTATE [HY000]:一般的なエラーsqlの結果はphpmyadminに表示されますが、私のウェブサイトには返されません

私の推測では、SET関数は返すレコードを許可しないため、このメッセージが表示されます。

私の解決策は、同じことをするためにコピーしたSQLコードを変更することですが、私のウェブサイトでは別の方法で書かれています。

Click here to see the SQL code in phpMyAdmin

私はあなたの多くはそうここにあるPHPコードを求めることがわかっています。

$servername = "mysql12.000webhost.com"; 
$username = "corey"; 
$password = "pass"; 
$dbname = "database"; 
$sql = "SQL CODE PLACED HERE. PASTED BELOW"; 
try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$stmt = $conn->prepare($sql); 
$stmt->execute(); 

$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
    $rows = new RecursiveArrayIterator($stmt->fetchAll()); 
    echo json_encode($rows); 
} 
catch(PDOException $e){ 
    echo "Error: " . $e->getMessage(); 
} 
$conn = null; 

、ここでSQLコード:


    SET @count =0; 
    SELECT * 
    FROM (SELECT * , @count := @count +1 AS rank 
    FROM montsbattlefront 
    WHERE RacesWon >=0 
    ORDER BY RacesWon DESC 
    ) AS t 
    WHERE rank 
    BETWEEN 0 
    AND 100000 

PHPのコードが完全に正常に動作します。 SQLコードは、私が最も懸念しているところです。 私は、ローカル変数とSETの使用を可能にするためにBEGIN ENDのようなものでSETを置き換えようとしましたが、これはphpmyadminがDELIMITERを非常に明確にサポートしていないため、誰かが私がやりたいことをするための簡単なSQLコードを書くための簡単な解決法を知っていますか?私はSQLプロではない、私は基本を知っている。

たとえば、@ countを使用する代わりに、COUNT()またはROW_NUMBER()を何らかの理由で使用できます.ROW_NUMBERはphpmyadminでも動作しません。誰かが私の基本的ではあるが巨大な問題に対する解決策を見出すことができれば、私はとても幸せになれます。

よろしく、

コーリーS.

答えて

0

set文を削除してみて、あなたが代わりにサブクエリでuser-defined variableを初期化することができます

SELECT * 
FROM (
    SELECT * , @count := @count +1 AS rank 
    FROM montsbattlefront, (SELECT @count := 0) t 
    WHERE RacesWon >=0 
    ORDER BY RacesWon DESC 
) AS t 
WHERE rank BETWEEN 0 AND 100000 
+0

はありがとうございました!!はい!これは素晴らしいです。 SETを削除し、この行をFROM montsbattlefrontに編集すると(SELECT @count:= 0)、そのトリックが実行されました。 –

関連する問題