• ベストアンサー

SQLのif()に関して。。。

$uid = $_SERVER['HTTP_X_UP_SUBNO']; $sql = "SELECT id FROM daykg WHERE id=$uid"; if($sql) { echo("既に登録されています。"); } else{ 登録フォーム} このようなコードですが、上手くいきません。DBに$uid情報を入れても消しても既に登録されています。が表示されます。 固体識別番号($uid)がDBにあれば「既に~」を表示し、無ければ登録フォームを表示するにはどうしたら良いでしょうか??

  • PHP
  • 回答数6
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.6

>if($result) これは無意味 >if(mydql_num_rows($result)) をはずしたのはエラーがでてしまった mysql_num_rows()ね http://www.php.net/manual/ja/function.mysql-num-rows.php どういうエラーなのかによります。 エラー内容を書いた方がよいでしょう 場合によっては次の手として $sql = "SELECT count(*) as count FROM daykg WHERE id=$uid"; $res = mysql_query($sql); $row=mysql_fetch_array($res,MYSQL_ASSOC); if($row["count"]>0) { echo("既に登録されています。"); }else{ 登録フォーム } とか

その他の回答 (5)

回答No.5
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

#3はmysql_affected_rowsの結果が逆ですね、失礼

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

こんな感じですかね $sql = "SELECT id FROM daykg WHERE id=$uid"; $res = mysql_query($sql); if(mysql_num_rows($res)) { echo("既に登録されています。"); }else{ 登録フォーム } 強引にやるならINSERTを投げてしまいって結果を判断するとか $sql = "INSERT IGNORE INTO daykg SET id=$uid"; $res = mysql_query($sql); if(mysql_affected_rows($res)) { echo("既に登録されています。"); }else{ 登録後処理 }

参考URL:
http://www.php.net/manual/ja/function.mysql-affected-rows.php
drmada
質問者

お礼

ありがとうございます!試してみます!

drmada
質問者

補足

$sql = "SELECT id FROM テーブル WHERE id=$uid"; $result = mysql_query($sql); if($result) { echo("既に登録されています。"); }else{ 登録フォーム } これでも上手くいきません。if(mydql_num_rows($result)) をはずしたのはエラーがでてしまった為です。どうぞよろしくお願いいたします。

回答No.2

文字列の判定をしているからだと思います。 $sql = "SELECT id FROM daykg WHERE id=$uid"; $result = select_db($sql, $con); // $conは接続情報、select_dbはSelect文を実行する関数 if($result) { // $sqlではなく実行結果で判定する echo("既に登録されています。"); } else{ 登録フォーム} } こんな感じにすれば上手くいくと思います。

drmada
質問者

お礼

ありがとうございます!試してみます!

  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.1

このままでは、$sql の中身は単なるテキストデータです。 文字列が入っているので if($sql) の結果は「真」と判定されるので echo("既に登録されています。"); が実行されます。 ちゃんとSQLを実行して、結果を取得しましょう。

drmada
質問者

補足

sql文がおかしいですか?回答ありがとうございます。

関連するQ&A

  • このコードの使い方は間違ってますか??

    $id = $_SERVER['HTTP_USER_AGENT']; if(strstr($id, "DoCoMo")){ $uid = $_SERVER['HTTP_X_DCMGUID']; echo "$uid"; }else if(strstr($id, "J-PHONE|Vodafone|SoftBank")){ $uid = $_SERVER['HTTP_X_JPHONE_UID']; echo "$uid"; }else if(strstr($id, "KDDI")){ $uid = $_SERVER['HTTP_X_UP_SUBNO']; } 固体識別情報を取得するコードです。 他サイトでstrstr()の使い方が間違えてると言われましたが、どう間違えてますか??

    • ベストアンサー
    • PHP
  • SQLで取得したフィールドをSQL文として利用

    お世話になっております。 MYSQLで sql_id (int PK) sql_data (text) のようなテーブル(sql_db)を持ち select sql_id from where (sql_data をsqlとして実行した結果 ) > 200 のように、フィールドから取得した値をSQLとして実行したりする方法はございますでしょうか。 ご教授よろしくお願いいたします。

  • ソフトバンク携帯のuidについて

    Softbank携帯のuidは ENV{HTTP_X_JPHONE_UID}で取得可能とネットで見たので $sbuid=$ENV{'HTTP_X_JPHONE_UID'} と記述してみたのですが、識別番号を取得できません。 同じようにauの識別番号を取得できるように $auid=$ENV{'HTTP_X_UP_SUBNO'} としてあるのですが、こちらは取得できています。 なぜソフトバンクの方は取得できないのでしょうか?

  • VBSの中で書くSQL文の記述方法

    よろしくお願いします。 select * from db1 into id,password,date,name where db1_id = **** and db1_password = **** and db1_date = 99999999; (db1_id,db1_password,db1_dateがプライマリキー) db1という表からプライマリキーに該当したデータを取り出し、 変数に格納したいと思っています。 このSQL文をASPのVBSの中で実現する方法を教えてください。 <% Dim Conn,SQL,RS Dim id Dim password Dim date Dim name db1=server.mappath("db1.mdb") DBName="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & db1 Set Conn = Server.CreateObject("ADODB.Connection") Conn.open DBName SQL = "select * from db1" INTO = "into id,password,date,name" WHERE = "where db1_id = **** and db1_password = **** _ and db1_date = 99999999" SQL = SQL & INTO & WHERE & ";" Set RS = Server.CreateObject("ADODB.Recordset") RS.Open SQL, Conn,3,3 %> これでうまくいくかな~と思ったのですが・・・。

  • 一つのSQLで実行できるでしょうか?

    sqliteで質問です。 今、以下のようなテーブル(table1)があったとします。 uid | date | comment 010 | 1211 | AAAAA 011 | 1211 | BBBBB 010 | 1220 | CCCCCC 011 | 1220 | DDDDDD このとき、1行目と4行目を取得や削除するようなSQLを一つで記述することは可能でしょうか? イメージてきには、 select * from table1 where {((uid = 010) and (date = 1211)), ((uid = 011) and (date = 1220))} みたいな感じにです。 つまり、where句の組み合わせを複数書いて一つのSQLで実行したいのです。 恐れ入りますが、よろしくお願いします。

  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • DB2のSQL

    select * from xTABLE where EMP_ID = "P001" というSQLを実行すると SQL0206N "P001" is not valid in the context where it is used. SQLSTATE=42703 のエラーが出ます。 SQLSTATEで調べても「"P001"の列がテーブルにない」ということみたいですが 列名で捉えている時点でおかしい気がします select * from xTABLE where EMP_ID = null のSQLは正常にテーブルのSELECT結果が返ってきます。 どうすればよいでしょうか?

  • 関数内で処理した内容を計算式で使用するには?

    function dbcount($table,$category) { require_once'DB.php'; $username = "abc"; $password = "abc"; $host = "abc"; $database = "abc"; $db = DB::connect("mysql://$username:$password@$host/$database"); $sql = "select count(*) from $table where $id;"; $result = $db->query($sql); while($row = $result->fetchRow()){ echo $row[0]; } } $kazu = 5; if ( $kazu >= db("table","key=1") ) { echo "真"; } else { echo "偽"; } ――――――――――――――――――――――――― といった感じのプログラムなのですが、if文が正常に処理されずに困っています。 関数dbを実行すると60が帰ってくるので、本来ならば「偽」と表示され、るはずなのですが、何故か「真」が表示され、文字の左側には60が表示されています。 60は関数を使用した結果なのですが、ここに表示されているという事は、条件式の数字として認識されていないという事でしょうか? だとすれば、どのようにすれば正常に計算されるのでしょうか?

    • ベストアンサー
    • PHP
  • UPDATE文について

    昨日こちらで自分の間違ったSQL文をご指摘頂き 時間計算の処理は実装する事が出来たのですが その後の計算処理が終わった後、計算結果をDBに格納する処理で 再度躓いてしまったので、再度のご教授お願いします。 $sql = "SELECT SUM(ROUND(労働時間/100, 0)) + ROUND(SUM(MOD(労働時間,100)) / 60, 2) AS total     FROM 労働時間テーブル WHERE id = 'ログインしている人のID';"; $total_Time = pg_query($con, $sql); $total_Time = pg_fetch_result($total_Time, 0, 'total'); // 確認のため、表示 echo $total_Time; で値はきちんと表示されおります。 しかし、この後UPDATE文で $sql = "UPDATE 労働時間テーブル SET 総労働時間 = '$total_Time' WHERE id = 'ログインしている人のID';"; pg_query($con, $sql); と打ち試しましたが、echoの時に表示された値がDBに格納されません。(>_<) 試しに $sql = "UPDATE 労働時間テーブル SET 総労働時間 = '$total_Time' WHERE id = 'ログインしている人のID';"; の'$total_Time'をSELECT文に変更したりもしましたが、echoの時に 表示されていた値とは違う値がDBに格納されるようになってしまいました。 どのように解決したらよいか、悩んでおります。 そもそもの考え方から間違っているのでしょうか? ご教授の程、よろしくお願い致します。

  • SQL文について

    こんにちは! 皆様に教えて欲しいことがあります。 DBの中のデータで、一番年齢が高い人の名前を取得してくるときってどんなSQL文を書けばいいんでしょうか? 一番高い年齢を取得、なら select Max(年齢) from DB でいいと思うんですけど、一番年齢の高い人の名前、となると、どうやってとってくるのかわかりません。 where文で「having max(年齢)」ってやったんですけど、エラーが出て実行できませんでした。 今作ってるSQL文は、DB二つから他の条件も含めてselectしているので、他の理由でエラーになってるのかもしれませんが・・・。 職場にSQLがわかる人がいないので、誰にも聞けません。 もしわかる方がいらっしゃいましたら、教えてください。 宜しくお願いします。

専門家に質問してみよう