みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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;

}

大変申し訳ないのですが、どなたかお分かりになるかたご教授お願い出来ませんでしょうか?

投稿日時 - 2007-05-22 16:49:43

QNo.3021293

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

> $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()で移動しているからです。

投稿日時 - 2007-05-23 22:02:37

補足

ご連絡ありがとうございます!
さっそく試してみたのですがやはりエラー表示されませんでした。
問題なくmysqlにデータを格納出来たように見えるのですが
実際はなにも移行できておりません。、
・$sname等の変数にSQLを壊す文字がある -> mysql_escape_string()
こちらに関しては実際にテーブルをいくつかつくって実験してみたら
格納できたので問題ないと思います。(画像とデータを別々のテーブルに格納することは出来ました。ただひとつのテーブルにまとめようとすると全然だめです。)
・SQLが表定義に合っていない
多分sql分のなにかがおかしいかと思うのですが、それがなにかが解らない状況です、。。

投稿日時 - 2007-05-23 22:44:13

ANo.2

> $_FILES['image']['picname']
$_FILES['image']['name'] では?

参考URL:http://jp.php.net/manual/ja/features.file-upload.php

投稿日時 - 2007-05-22 23:30:18

お礼

tany180sx様がおしゃっる通りでした。
ご指摘どうもありがとうございます!
ただ残念なことにまだ動きませんでした。苦笑

投稿日時 - 2007-05-23 14:26:24

ANo.1

>$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にどんな文字列が入っているのかを調べましょう。

投稿日時 - 2007-05-22 23:10:40

補足

さっそくのご返答ありがとうございます!
こちらで頂きましたスクリプトで挑戦してみました!↓
$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)ただしなにも表示されませんでした。
コード自体間違ってはなさそうな気がするのですが、これではだめなんでしょうか?

投稿日時 - 2007-05-23 14:21:12

あなたにオススメの質問