-2

私はあなたがこれにできることを知っています

$var = mysql_query("SELECT * FROM..") ? mysql_query("SELECT * FROM.."):'Nope!';

// the same as this

if(mysql_query("SELECT * FROM..")) $var = mysql_query("SELECT * FROM..");
else $var = 'Nope!';

しかし、配列または false を返し、テーブル内の一部のデータを更新する可能性がある関数だったとしたらどうでしょう。そこで何かいい方法はないかと考えてみました

$var = mysql_query("SELECT * FROM..") ? $returnOfFunction:'Nope!';

このようなもの

$var = mysql_query("SELECT * FROM..") || 'Nope!';

しかしPHPでは、これが真であるか、これが真である場合、私は真であることを意味します

誰かが私の考えを理解してくれることを願っています。

編集:これはうまくいきますか?

function pickTrue($one, $two) {
  if($one == true) return $one;
  else return $two;
}

$var = pickTrue(mysql_query("SELECT * FROM table"), 'Nope');
4

4 に答える 4

1
  • まず、関数を使用しないでくださいmysql_*。それらは廃止されています。
  • 次に、mysql_queryフェッチする必要があるリソースを返します。1 つの変数にリソースまたは文字列のいずれかを含めることは、悪い習慣です。

より良い方法は次のとおりです。

$q= 'SELECT a, b, c FROM mytable';
if($r= $db->query($q)){
  $success = 'yep';
  while($row = $r->fetch_assoc()) {
    //do stuff
  }
} else {
  $success = 'nope';
}
于 2013-04-02T18:36:39.007 に答える
0

orの代わりに演算子を使用し||ます。結合優先度が低くなります。例えば

$result = mysql_query($sql) || die(mysql_error()); // always kills the script
v.s.
$result = mysql_query($sql) or die(mysql_error()); // kills the script ONLY if the query returns false

ただし、そのような複雑なコードは使用しないでください。行数を減らすことは良いことですが、読みやすさが損なわれると、ひどく悪いことになります。

主な問題は、SELECTクエリがブール値の false (クエリ/データベースの失敗) または結果セットを返すことです。実際にデータ行を取得して調べるまで、結果セットが何であるかを知ることはできません。たとえば、クエリ呼び出しが false 以外の値を返したからといって、クエリが実際に成功したとは限りません。データを返さないクエリも有効なクエリです。

たとえば、ログイン システムを考えて、アカウントが存在するかどうかを確認します。

$sql = "SELECT id FROM users WHERE username=Some_username_that_doesnt_exist";
$exists = mysql_query($sql) or "Nope!";

クエリは完全に有効ですが、ユーザー名が存在しないため、空の結果セットが返されます。これは false ではない結果なので、or Nopeはトリガーされません。これで、コードはユーザー名が存在すると見なし、ふざけて... 間違ったコード パスに進みます。

于 2013-04-02T18:33:19.763 に答える
0

このようなコードを書かないでください。mysql_query からの結果は、常に比較可能なブール値になるとは限りません。また、データベースのクエリ時に実行できるエラー メッセージとエラー処理もすべて失われます。

簡単な答え: はい。長い答え: しないでください

于 2013-04-02T18:32:56.677 に答える