またお世話になります。
PHPからMySQLへデータをインサートしたいのですが、各サイトを参考にしながら試しているのですがどうにも上手くいきません。
ソースを見ていただけますでしょうか?

$con = mysql_connect("localhost","user","password")
or die("MySQLに接続できません。");

mysql_select_db('test');
$sql = "SET CHARACTER SET UTF8";
$result = mysql_query($sql);

$data1 = $HTTP_POST_VARS["inpdata1"];
$data2 = $HTTP_POST_VARS["inpdata2"];
$data3 = $HTTP_POST_VARS["inpdata3"];

$sql = 'INSERT INTO `tab1` (`abc`, `def`, `ghi`) VALUES (`$data1`,`$data2`,`$data3`);';
$result = mysql_query($sql);

print $data1; //ここでは通常にデータが表示されるので
print $data2; //データの受け渡しは問題ないはずですが。
print $data3;

mysql_free_result($result);
mysql_close($con);

このQ&Aに関連する最新のQ&A

A 回答 (2件)

$result = mysql_query($sql) or die(mysql_error());



としてデバッグしてみるといいですよ。

×$sql = 'INSERT INTO `tab1` (`abc`, `def`, `ghi`) VALUES (`$data1`,`$data2`,`$data3`);';
○$sql = "INSERT INTO `tab1` (`abc`, `def`, `ghi`) VALUES ('$data1','$data2','$data3')";

単純に、valuesの中で渡すデータはバッククォーテーションではなく
シングルクォーテーションです。フィールド名ではなくデータを
わたしたいのですから・・・。
$sql変数に代入する場合のくくりはダブルクォーテーションですね。
(変数を参照するため)

それと念のため、sqlのケツのセミコロンは取っておいた方がよいです。
    • good
    • 0
この回答へのお礼

環境も書かない(書き忘れた)失礼な質問に親切なお礼、ありがとうございます。
無事上手くいきました。

ただ
>それと念のため、sqlのケツのセミコロンは取っておいた方がよいです。

このケツのセミコロンはないとエラーになってしまいました。
付けてあって正解のようです。

ところでこのような質問はMySQL側でよろしいのでしょうか?
PHP側で質問するべきでしょうか?
この回答だけ頂いたら回答を締め切らせていただこうと思います。

お礼日時:2007/03/29 14:18

うーん、どっちなんでしょうね・・・


ま、マルチポストさえしなければどっちでもいいんじゃないですか?
私は両方ともこまめに見てますので、どちらでも
フォローできると思いますよ。

>ケツのセミコロン
説明不足ですみませんが、ケツのセミコロンとはSQL分のセミコロン
のことを言いたかったのです。
場合によってはこれをつけるとエラーになることがあります。

もちろんほんとのケツのセミコロンはPHPの文法上の区切り文字
なので必須です。
    • good
    • 0
この回答へのお礼

セミコロン、また私が勘違いしていたようですね。
理解できました、ありがとうございます。

マルチポストは確かにまずいですね。
今後も一連の質問は、とりあえずこちらのほうにさせていただこうと思います。

非常に簡単なものですが、なんとか作成しているデータベースも型になってきました。
同時にMySQLとPHPも少し分かってきたような気がします。
今後もぜひご指導お願いします。

お礼日時:2007/03/30 11:40

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qmysql_close をすれば mysql_free_result は必要ありませんか?

mysql_close と mysql_free_result の使い方がよく分かりません。

mysql_close でデータベースとのコネクションを切断すれば、mysql_free_resultする必要がないように思うのですが・・・

クエリで使用したメモリの解放は必ずした方が良いのでしょうか?

また、mysql_close と mysql_free_result をすることによってMySQLサーバーへの負担は軽減されるのでしょうか?

Aベストアンサー

きちんとしたプログラムを心がけるなら
開いたら閉じる、いらなくなったらすてるというのが基本ですね。

>必ずした方が良いのでしょうか?

と聞かれたら「はい」というのが正解でしょうね。
ただ、実際問題みんなそうしているかというと、手間だから
省いている人も多いでしょう。だからといって、しなくていい
というわけではありません。

Qmysql_real_escape_string()の簡単な構文

mysql_real_escape_string()関数について2つほど質問があります。
1.この関数はSQLとして書くものですか?それともプログラムとして書くものですか?
2.公式サイトの例がよく理解できないので、簡単な構文を教えていただけないでしょうか?

初心者的な質問ですが、よろしくお願いします。

Aベストアンサー

>1.この関数はSQLとして書くものですか?それともプログラムとして書くものですか?

PHPの関数ですからプログラムとして書くものですね。

>2.公式サイトの例がよく理解できないので、簡単な構文を教えていただけないでしょうか?

$hoge= mysql_real_escape_string(trim($_REQUEST['hoge']));
などgetやpostで受けたデータをエスケープします。

Qmysql_close();の必要性について

初心者です、よろしくお願いします。

参考書などの参考ソースを見ていると必ずページの最後や
クエリーを投げた終わりにmysql_close();を使ってmysqlを切断??しているのですが、これは必要なのでしょうか?

初心者ながら、ページは上から読み込まれるのでページのロードが完了した時点で接続が切れると思うのでが・・・

ご存知の方がいましたら是非教えてください。
よろしくお願い致します。

Aベストアンサー

>初心者ながら、ページは上から読み込まれるのでページのロードが完了した時点で接続が切れると思うのでが・・・

ここで切れるのは、クライアント(ブラウザ)とWebアプリケーションとの接続です。WebアプリケーションからDBへの接続とは別です。

ただし、http://jp.php.net/manual/ja/function.mysql-close.php に書いてあるように、PHPなどの言語では、Webアプリケーションの実行終了時に、WebアプリケーションからDBへの接続は自動的に切断されます。なので、これらの言語では、プログラマーがプログラム中にmysql_closeと必ず書かなければならない訳ではありません。

ですが、mysql_closeで接続を切断するのは、一般的に良い習慣だとされています。というのは、DBへの接続は限られた貴重な資源だからです。Webアプリケーションの実行終了を待たずに、不要になった時点で速やかにmysql_closeでDB接続を切断してやれば、DBへの接続を必要としている他のアプリケーションが、より早くそのDB接続を使用できるようになります。

例えが適切か判りませんが、うちのテレビは一定時間操作しないと自動的に電源が切れるようになっています。ですが、自動的に切れるからといって、テレビをつけっ放しにしておくことは無い訳です(そんなことをしたら家族に怒られます)。

>初心者ながら、ページは上から読み込まれるのでページのロードが完了した時点で接続が切れると思うのでが・・・

ここで切れるのは、クライアント(ブラウザ)とWebアプリケーションとの接続です。WebアプリケーションからDBへの接続とは別です。

ただし、http://jp.php.net/manual/ja/function.mysql-close.php に書いてあるように、PHPなどの言語では、Webアプリケーションの実行終了時に、WebアプリケーションからDBへの接続は自動的に切断されます。なので、これらの言語では、プログラマーがプログラ...続きを読む

Qmysql_real_escape_string

独学数ヶ月の初心者の質問で恐縮です。

もろもろの事情で仕方なくmysql_real_escape_stringを
以下(1)のように使用しなくてはならないと仮定し、
セキュリテイの面で(2)のようにシングルクオテーションつける
事で危険を回避できますか?

またシングルクオテーションは(2)のようにつけてはいけない
とかありますか?(記述の基本が曖昧なため、ただの確認の質問)

(1)
$sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id",
mysql_real_escape_string($id),
mysql_real_escape_string($password));

(2)
$sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id",
’mysql_real_escape_string($id)’,
’mysql_real_escape_string($password)’);


よろしくお願いします。

独学数ヶ月の初心者の質問で恐縮です。

もろもろの事情で仕方なくmysql_real_escape_stringを
以下(1)のように使用しなくてはならないと仮定し、
セキュリテイの面で(2)のようにシングルクオテーションつける
事で危険を回避できますか?

またシングルクオテーションは(2)のようにつけてはいけない
とかありますか?(記述の基本が曖昧なため、ただの確認の質問)

(1)
$sql = sprintf("SELECT id , password FROM `adminDatabase` where id = '%s' and password = '%s' order by id",
mysql_real_escape_string...続きを読む

Aベストアンサー

まずmysql_real_escape_string自体がmysql系の古い関数なので非推奨です。
独学で学習されているのでしたら、参考にしている書籍やサイトを新しいものに変えてください。
最低でもmysqli系の処理に置き換えてください。

また$idや$passwordなど管理側が仕様を指定できるものは
・m文字以上でn文字以下であること
・構成文字が英数字のみに限られること
などをチェックして、そうでない場合はエラーを返すような仕様にしておけば
あえてエスケープする必要はありません

任意の文字列を利用して検索をかけたりするような場合はPDOを利用し、
プリペアドステートメントで処理するのが妥当だといわれています。

QPHP+MySQLでCall to undefined function mysql_connect()

PHP5.0.14
MySQL5.0.22

http://allabout.co.jp/computer/database/closeup/CU20060414A/index.htm
上記のサイトを見て

$dbHandle = mysql_connect("localhost","root","root")
or die("can not connect db\n");

を実行したところ、タイトルのようなエラーが出ました。

php.iniでextension=php_mysql.dllも書かれていて、
php_mysql.dllもphp/extに入っています。

phpinfo()で見ると、MySQLらしき部分がありません。
どうすれば実行できるのでしょうか?

Aベストアンサー

WindowsOSの環境変数のPATHに、
phpのディレクトリを設定してみてください。
libmysql.dllが、PATHでサーチできないとそうなるようです。
(よくlibmysql.dllを、Windowsのシステムフォルダにコピーする手が紹介されていたりしますが、phpにPATHを通すやり方が正統派と思います。)


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報