1

私はこのコードを得ました:

set @row_num = 0;
SELECT @row_num := @row_num + 1 as row_number,id,name,salary 
FROM employee
ORDER BY salary;

これは、mySQL と完全に連携します。関数を使用してPHPを実行しようとすると、問題が発生しmysql_query()ます。それは私にこのエラーを与えます:

SQL 構文にエラーがあります。near '; を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。SELECT @row_num := @row_num + 1 as,id,name ' at line 1

問題は に由来することはSET @ROW_NUMわかっていますが、PHP ではなく MYSQL で機能する理由を知る必要があります。他のコードは使用できません。このコードは正しく、機能しますが、PHP では機能しません。PHPで動作しない理由について何か提案はありますか?

ありがとう

4

2 に答える 2

7

これらは 2 つのクエリとして扱われるため、この方法で 1 つのクエリとして実行することはできませんが、代わりに次のように実行できます。

SELECT @row_num := @row_num + 1 as row_number,id,name,salary 
FROM employee, (SELECT @rum_num :=0 ) AS t
ORDER BY salary;

の使用をやめてmysql_query、代わりにPDOを使用してください。

于 2013-09-09T12:41:28.127 に答える
2

PHPマニュアルから:

mysql_query()は、指定された link_identifier に関連付けられているサーバー上の現在アクティブなデータベースに一意のクエリ(複数のクエリはサポートされていません) を送信します。

クエリ文字列には 2 つのクエリが含まれているため、 を使用して呼び出すことはできませんmysql_query()

さらに、PHP 関数は廃止され、非推奨になっていることに注意してmysql_xxx()ください。これについては、マニュアル ページを参照してください。

したがって、最善の解決策は、必要な機能をサポートする最新のデータベース API に切り替えることです。PHP にはmysqliまたはPDOの 2 つのオプションがあります。より柔軟な PDO をお勧めしますが、古い mysql 関数の使用に既に慣れている場合は、mysqli を使用する方が簡単です。

于 2013-09-09T12:48:18.120 に答える