phpMyAdminでできるSQL(Insert)をPHPからなげられない - PHPプロ!Q&A掲示板

4913

  • 0P

phpMyAdminでできるSQL(Insert)をPHPからなげられない

質問日時 / 2017年12月30日 14:30    回答数 / 1件

Questioner:  kanade  このエントリーをはてなブックマークに追加 

キーワード / PHP    MySQL    phpMyAdmin   

MySQLの勉強をしております。
SQLについてなんとなくわかってきたのですが、phpMyAdminから直接投げられるSQLをPHPで書いてもInsertできません。

エラーも吐き出していないようでして原因がわからなくて・・・。
出力例:Resource id #5

一部伏せ字にさせていただいております。
id,name という形のデータベースになります。

  1. <?php
  2.  
  3. header('Content-Type: text/html; charset=UTF-8');
  4.  
  5. // DB接続用
  6. $server = "*****.db.sakura.ne.jp";
  7. $mydb = "*****";
  8. $usr = "*****";
  9. $pass = "*****";
  10. //$query = "SELECT * FROM `name`";
  11. $query = "SELECT MAX(id) FROM `name`";
  12. $link = mysql_connect($server$usr$pass);
  13. $db = mysql_select_db($mydb$link);
  14. mysql_query('SET NAMES utf8'$link);
  15. $result = mysql_query($query);
  16.  
  17. $max = 0;
  18.  
  19. while($row = mysql_fetch_assoc($result)) {
  20.  
  21.     $id = $row["id"];
  22.     $name = $row["name"];
  23.     //$detail = $row["detail"];
  24.  
  25.     //echo $id . " " . $name . "<br>";// . $detail;
  26.     //echo $row["MAX(id)"];
  27.     $max =  $row["MAX(id)"];
  28. }
  29.  
  30.  
  31. $query2 = "INSERT INTO `*****`.`name` (`id`, `name`) VALUES ('" .($max+1)"', 'test');";
  32. $result2 = mysql_query($query);
  33. if(!$result2){
  34.     echo $result2;
  35. }else{
  36.     echo $result2."  insert success"// こちらに入る
  37. }
  38.  
  39. mysql_free_result($result);
  40. mysql_free_result($result2);
  41. mysql_close($link);
  42.  
  43. ?>

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimixMySQL関数は、php5.xで非推奨・php7で削除されている

回答一覧

並び替え:

A01
answerershimix [1月5日 14:07] (最終編集:1月5日 14:17)

MySQL関数は、php5.xで非推奨・php7で削除されている関数です。php5系の保守対応であれば話は別ですが、そうでないならPDOを使って書き直してください。新規に書くソースではMySQL関数を使うべきではありません。

http://php.net/manual/ja/mysqlinfo.api.choosing.php




$query = "SELECT MAX(id) FROM `name`";

このクエリしか実行していないので、

$id = $row["id"];
$name = $row["name"];

この2行は確実にエラーになります。逆にコメントアウトされている

//$query = "SELECT * FROM `name`";

こっちを有効にしたら

$max =  $row["MAX(id)"];

こちらがエラーになります。

必ずエラーになるソースを提示されて不具合個所を探すのは不毛な作業です。せめてエラーにならないソースを提示してください。


>$query2 = "INSERT INTO `*****`.`name` (`id`, `name`) VALUES ('" .($max+1). "', 'test');";

id は整数値だと思いますが、なぜ単引用符で括っているんでしょうか?それとも id は文字列型なんでしょうか。でもそれだとMAXの引数に出来ませんよね(というか最大値の概念がない)。ちょっと矛盾した記述です。




なお、

>$result2 = mysql_query($query);
>if(!$result2){
>    echo $result2;
>}else{
>    echo $result2."  insert success"; // こちらに入る
>}

$query2(insert文)ではなく$query(select文)を実行していますから、$result2にはResourceがセットされるのは正常な動作です。おそらくは最初の行で

$result2 = mysql_query($query2);

としたかったのですかね。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)