- 締切済み
PHPデータをMYSQLに格納
こちらのmysqlのフィールドが 1. CREATE TABLE `temp_upload` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(255) NOT NULL default '',`mime` varchar(255) NOT NULL default '',`image` longblob NOT NULL, `created` timestamp(14) NOT NULL, PRIMARY KEY (`id`)) の場合では下記のコードを入力してBLOBに画像の格納が出来ました。 # // 追加SQL作成 # $sql = sprintf( 'INSERT INTO temp_upload ( name, mime, image ) VALUES ( "%s", "%s", "%s" )', # mysql_real_escape_string( $_FILES['image']['name'] ), # mysql_real_escape_string( $_FILES['image']['type'] ), # mysql_real_escape_string( $image ) ); # # # $result = mysql_query( $sql ); # # header( sprintf( 'Location: %s', $_SERVER['SCRIPT_NAME'] ) ); # exit; # # } ただしもmysqlのフィールド数がもっとある場合はどのように記述をすればいいのでしょうか。 色々と調べ、なんども変更を加えて試してもみたのですがどうしてもmysqlにデータ・画像が格納されません。 こちらがその全然動かないコードになります。 $sql = sprintf( 'INSERT INTO temp_upload (sname, str_check1, sonohoka, train, ken, add1, stime, holiday, denwa, menu1, menu2,url, picname, mime, image ) VALUES ("$sname","$str_check1", "$sonohoka", "$train", "$ken", "$add1", "$stime", "$holiday", "$denwa", "$menu1", "$menu2","$url", "%s", "%s", "%s" )', mysql_real_escape_string( $_FILES['image']['picname'] ), mysql_real_escape_string( $_FILES['image']['type'] ), mysql_real_escape_string( $image ) ); $result = mysql_query( $sql ); header( sprintf( 'Location: %s', $_SERVER['SCRIPT_NAME'] ) ); exit; } 大変申し訳ないのですが、どなたかお分かりになるかたご教授お願い出来ませんでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- tany180sx
- ベストアンサー率63% (239/379)
> $result = mysql_query( $sql ); を ini_set('error_reporting', E_ALL); var_dump($sql); mysql_query($sql); echo mysql_error(); exit; くらいにすればなにかしら表示されませんか? sprintfでqueryしたことはないですが、問題があるとすれば ・$sname等の変数にSQLを壊す文字がある -> mysql_escape_string() ・$imageが入ってない ・SQLが表定義に合っていない > var_dump($sql)ただしなにも表示されませんでした。 これはたぶん表示した後でheader()で移動しているからです。
- tany180sx
- ベストアンサー率63% (239/379)
> $_FILES['image']['picname'] $_FILES['image']['name'] では?
お礼
tany180sx様がおしゃっる通りでした。 ご指摘どうもありがとうございます! ただ残念なことにまだ動きませんでした。苦笑
- hrm_mmm
- ベストアンサー率63% (292/459)
>$sql = sprintf( 'INSERT INTO temp_upload (sname, str_check1, sonohoka, train, ken, add1, stime, holiday, denwa, menu1, menu2,url, picname, mime, image ) VALUES ("$sname","$str_check1", "$sonohoka", "$train", "$ken", "$add1", "$stime", "$holiday", "$denwa", "$menu1", "$menu2","$url", "%s", "%s", "%s" )', PHPでは、シングルクオートされた文字列内では変数展開されませんので "$sname" などは、ただの$付き文字列として格納されます。 mysqlでは、ダブルクォートだけでなく、シングルクォートも使えますので、クォートを反転させて以下のように $sql = sprintf( "INSERT INTO temp_upload (sname, str_check1, sonohoka, train, ken, add1, stime, holiday, denwa, menu1, menu2,url, picname, mime, image ) VALUES ('$sname','$str_check1', '$sonohoka', '$train', '$ken', '$add1', '$stime', '$holiday', '$denwa', '$menu1', '$menu2','$url', '%s', '%s', '%s' )", それとも、sprintfを使っているのだから、変数は全部引数に入れてしまうとか $sql = sprintf( 'INSERT INTO temp_upload (sname, str_check1, sonohoka, train, ken, add1, stime, holiday, denwa, menu1, menu2,url, picname, mime, image ) VALUES ( "%s", "%s", "%s" , "%s", "%s", "%s" , "%s", "%s", "%s" , "%s", "%s", "%s" , "%s", "%s", "%s" )', $sname,$str_check1, $sonohoka, $train, $ken, $add1, $stime, $holiday, $denwa, $menu1, $menu2,$url, mysql_real_escape_string( $_FILES['image']['picname'] ), mysql_real_escape_string( $_FILES['image']['type'] ), mysql_real_escape_string( $image ) ); それでも求める動作にならないときは、エラー表示がないか、$sqlにどんな文字列が入っているのかを調べましょう。
補足
さっそくのご返答ありがとうございます! こちらで頂きましたスクリプトで挑戦してみました!↓ $sql = sprintf( 'INSERT INTO temp_upload (sname, str_check1, sonohoka, train, ken, add1, stime, holiday, denwa, menu1, menu2,url, picname, mime, image ) VALUES ( "%s", "%s", "%s" , "%s", "%s", "%s" , "%s", "%s", "%s" , "%s", "%s", "%s" , "%s", "%s", "%s" )', $sname,$str_check1, $sonohoka, $train, $ken, $add1, $stime, $holiday, $denwa, $menu1, $menu2,$url, mysql_real_escape_string( $_FILES['image']['picname'] ), mysql_real_escape_string( $_FILES['image']['type'] ), mysql_real_escape_string( $image ) ); そこで質問があるのですが、 $sname,$str_check1, $sonohoka, $train, $ken, $add1, $stime, $holiday, $denwa, $menu1, $menu2,$url,の部分は必要なのでしょうか? 実際上記のコードをいれて動かそうとしたのですが、エラーメッセージなどは表示されずフォームなどは表示されるのですがmysqlにデータを格納することが出来ませんでした。エラーメッセージが出ないので正直どこが間違ってるのかが解りません。。 また$sqlにどのような文字列がはいってるのか確かめてみたのですが var_dump($sql)ただしなにも表示されませんでした。 コード自体間違ってはなさそうな気がするのですが、これではだめなんでしょうか?
補足
ご連絡ありがとうございます! さっそく試してみたのですがやはりエラー表示されませんでした。 問題なくmysqlにデータを格納出来たように見えるのですが 実際はなにも移行できておりません。、 ・$sname等の変数にSQLを壊す文字がある -> mysql_escape_string() こちらに関しては実際にテーブルをいくつかつくって実験してみたら 格納できたので問題ないと思います。(画像とデータを別々のテーブルに格納することは出来ました。ただひとつのテーブルにまとめようとすると全然だめです。) ・SQLが表定義に合っていない 多分sql分のなにかがおかしいかと思うのですが、それがなにかが解らない状況です、。。