2017-09-18 24 views
-2

私は自分のテーブルと別のテーブルのデータを同時に比較しようとしています。サブクエリが1行以上返します

<?php 

$check="select * from A where si='".$user."' and code = (select synpr from user)"; 

?> 
+5

サブクエリが1つ以上の行を返すので、サブクエリ内に 'WHERE'条件または' LIMIT'が必要です。多分両方。 – Qirel

+2

[Little Bobby](http://bobby-tables.com/)によると*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-in-php)***。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

+2

サブクエリは、 '='とともに使用すると複数の行を返すことはできません。単一の値を別の単一の値と照合することになっています。単一の値を複数の可能な値と比較することはできません。実際の意図に応じて、サブクエリがコードを含む単一の行を返すように制限するか、=をINに変更する(サブクエリによって返される行の少なくとも1つに 'code'があるかどうかをチェックするように) – ADyson

答えて

2

コードにwhere条件がありません。

しかし、何を比較しようとしていますか? like synprのユーザーはsiと同じユーザーでなければなりませんか?

はそう

SELECT * from A where si='$user' AND code = (SELECT synpr FROM user WHERE user='$user'); 

しかし、もしあなたがコードでsynprを選択しているので、その後、私はあなたが正確に比較しようとしているか見当もつかない。何か他にあなたが達成しようとしていることを教えてくれる?

-1
<?php 
$check="select * from A where si='".$user."' and code = (select synpr from user LIMIT 1)"; 
?> 

こと、または、呼び出したいデータをより正確に利用できる唯一の試合は本当にあります場合は、クエリが正しくありません。

+1

テーブルの最初の行が一致する必要があることをどのように知っていますか?毎回そのようになることはまずありません。たぶん複数の行がチェックされるべきです(INを使わない=)。コードの目的についてOPからの適切な明確化を待つ方が良い。 – ADyson

+0

編集されました。一致した場合は1行が返されます。 – Steven

+0

私の懸念に答えることはできません。これは、それが比較されるべき最初の行であることを前提としています。あなたがその質問からそれをどのように結論づけることができるかわからない。現実の世界について考えるなら、必要とされることはほとんどありません。 – ADyson

関連する問題