ID登録せずに、無料で質問できる♪ 教えて!gooアプリ>>

はじめまして。
MySQL+PHP初心者なのですが、INSERT文中での変数展開がうまくいきません。

フォームから受け取ったデータを単純にレコードに追加するだけなのですが、

mysql_query('insert into area_tbl (area)values($area)');

areaのデータ型はテキストで、$areaをクォーテーションで囲めば当然のごとくそのまま表示されてしまいますし、事前に $area = $_POST['area'] の処理をしてもダメです。直後に echo "$area" をするとフォームに入力した文字列が表示されるので、データの受け渡しはうまくいっていると思います。また ($area) の代わりに'あいうえお'といれると【あいうえお】とデータベースに反映されるので、MySQLとPHPの日本語対応の問題もないと思います。なぜでしょうか?

ご指導のほどよろしくお願いいたします。

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

A 回答 (3件)

mysql_query('insert into area_tbl (area)values("'.$area.'")');


を試してみてください。
    • good
    • 0
この回答へのお礼

一発でうまくいきました。

MySQLやPHP関連のサイトを見て回ったのですが、なかなか答えにたどり着けずにいました。ありがとうございます。

お礼日時:2005/04/11 19:51

mysql_query("insert into area_tbl (area)values('$area')");


でもできる。
    • good
    • 0

'(シングルクォート)で括った場合は変数展開されません。


"(ダブルクォート)で括りましょう。
    • good
    • 0

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

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

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

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

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

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

Qデータベースに変数の値を挿入

 HTMLのフォームから、getParameterで取得した値(id,name,club)をデータベースに挿入したいのですが、
String sql="insert into test_table values(id,name,club)";
 と記述してもその文字列がそのままテーブルに反映されてしまいます。
 もちろん、
String sql="insert into test_table values('12','●田○郎','野球部')";
とあらかじめ記述しておけばこのデータがテーブルに挿入されるのですが・・・。
 PHPでは確かvalues('{$id}','{$name}','{$club}')のように記述すればできたので戸惑っています。
 JAVAでSQL文に変数を含める場合、どのように記述すればいいのでしょうか?

Aベストアンサー

String sql="insert into test_table values(" + id + "," + name + "," + club + ")";

でいけます。
""で括られている中は文字列なので、変数として扱いたければ文字列の外に出せば良いだけです。
id、name、clubが文字型であるなら、↓のようにシングルクォートで括りましょう。

String sql="insert into test_table values('" + id + "','" + name + "','" + club + "')";

Qphpからinsertできない

またお世話になります。
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);

またお世話になります。
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...続きを読む

Aベストアンサー

$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のケツのセミコロンは取っておいた方がよいです。

QVBとアクセスでSQL文に変数を使いたいのですが

したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'(変数1)','(変数2)','(変数3)')"

変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか?

もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

Aベストアンサー

文字列なんで、&で連結すればOKです。

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'" & 変数1 & "','" & 変数2 & "','" &(変数3)& "')"

QInsert文 で 変数を使いたい

いつもお世話になっております。
現在、VB2005でSQLのプログラムを書いているのですが。
下記のInsert分に関してなのですが・・・

sCom = New SqlClient.SqlCommand(_
& "insert into janDB"(区分,コマンド種別,No) " _
& "values('A01','send',100)", scn)

としたらうまくいくのですが、
valuesの実データを変数にしたいのですが,
そういった処理はできないでしょうか?

何分初心者の上、試行錯誤しているのですがうまくいきません。
アドバイス等を頂けたら幸いです。

SQL Server 2005 Express Edition
Visual Studio 2005 Standard Edition
Windows XP Pro SP2

Aベストアンサー

sCom = New SqlClient.SqlCommand(_
& "insert into janDB"(区分,コマンド種別,No) " _
& "values('A01','send',100)", scn)

sCom = New SqlClient.SqlCommand(_
& "insert into janDB"(区分,コマンド種別,No) " _
& "values('" & <A01の変数> & "','" & <sendの変数> & "'," <100の変数> & ")", scn)
にすれば?

試験環境なくて試験できてませんが。
sComを組み立てたあとで、直接記述したものと同じ文字列を作成できればOKのはず。

QERROR1062:Duplicate entry.....というエラーが出てしまいました

いつもお世話になります。
データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、
ERROR1062:Duplicate entry.....というエラーが出てしまいました。
お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。
【実行したSQL】
INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52

tblAの主キー:dataA1とdataA2
tblBの主キー:dataB1

dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

Aベストアンサー

「ERROR 1062」は、重複データを格納しようとした場合に出力されるエラーです。
既にdataA1='9001'&dataA2='AA'という行が、tblAに格納されているのですよね?

>抽出されてくるデータは常に1件なので問題ないと期待していました

「insert ~ select ~」を実行前に、既に同じデータが格納されているのでは?
あるいはprimary keyの指定が、質問中に記された通りでなく、2件以上検索されているかです。

>何か良い方法はないものでしょうか?

何をするための方法を、聞きたいのかが分かりませんが?

QPHP insert文内での、変数の記述の仕方

for($cnt = 1; $cnt <= 11; $cnt++){
$sql3 = "insert into Shizai (ShiNo,ShiHin) values ('" . $cnt . "','" . $_POST['ShiHin.$cnt.'] . "')";
print $sql3;
$result3 = mysql_query($sql3,$link) ;
}

としたい場合、$_POST['ShiHin.$cnt.']の箇所はどう書いたら良いのでしょうか?
$_POST['ShiHin.$cnt.']でも$_POST['ShiHin$cnt']でも値を拾いませんでした。

基本的な事で申し訳ございませんが、ご教授願えますでしょうか?
よろしくお願いします。

Aベストアンサー

$_POST['ShiHin' . $cnt]と書きたかったのでは?
シニグルクォートでは変数は展開されないですよ。
$_POST["ShiHin{$cnt}"];
$name = 'ShiHin' . $cnt;
$_POST[$name];

$_POST値をそのままSQLに使うのは危ないですな。

QERROR 1054 (42S22) 原因不明です

idはintでプライマリー
a5はchar(10)で日本語文字列を格納

データを取得しようとすると#1054エラーがでます。

admin--------
SELECT * FROM `aaa` WHERE `a5`=`あいうえおかき`
#1054 - Unknown column 'ã

moniter--------
mysql> SELECT * FROM `aaa` WHERE `a5`=`あいうえおかき`;
ERROR 1054 (42S22): Unknown column '縺ゅ>縺・∴縺翫°縺・ in 'where clause'


`あいうえおかき`の日本語に問題があると思い半角データを1行だけ更新しました。
admin--------
SELECT * FROM `aaa` WHERE `a5`=`abcde`
#1054 - Unknown column 'abcde' in 'where clause'

moniter--------
mysql> SELECT * FROM `aaa` WHERE `a5`=`abcde`;
ERROR 1054 (42S22): Unknown column 'abcde' in 'where clause'


admin--------
moniter--------
SELECT * FROM `aaa` WHERE `a5`
SELECT `a5` FROM `aaa` WHERE 1
SELECT * FROM `aaa` WHERE `id`=89584
成功

idはintでプライマリー
a5はchar(10)で日本語文字列を格納

データを取得しようとすると#1054エラーがでます。

admin--------
SELECT * FROM `aaa` WHERE `a5`=`あいうえおかき`
#1054 - Unknown column 'ã

moniter--------
mysql> SELECT * FROM `aaa` WHERE `a5`=`あいうえおかき`;
ERROR 1054 (42S22): Unknown column '縺ゅ>縺・∴縺翫°縺・ in 'where clause'


`あいうえおかき`の日本語に問題があると思い半角データを1行だけ更新しました。
admin--------
SELECT * FROM `aaa` WHERE `a5`=`abcde`
#1054...続きを読む

Aベストアンサー

> SELECT * FROM `aaa` WHERE `a5`=`abcde`

こうしてみるとか:

SELECT * FROM aaa WHERE a5='abcde'

参考:
http://dev.mysql.com/doc/refman/5.1/ja/identifiers.html
http://dev.mysql.com/doc/refman/5.1/ja/string-syntax.html

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

QMysql UPDATE出来ません

PHP+MySQLでホームページ開発中ですが、MySQLで特定idのフィールドの更新処理(UPDATE)が出来ません。初心者です宜しくお願いします。
【Mysqlで確認した点】
(1)XAMPP・MyAdminからは以下のSQL文で問題なく更新できる。
"UPDATE upload_list SET rem='ABCDEF' WHERE id=15;"
【問題は?】
以下のphpからは更新できません。
【phpで確認した点は?】
(1)DBへ正常に接続してる。
(2)文字コードも正常にSETしてる。
(3)UPDATE実行後の$RESULT(返り値)がない。
(4)PHPを実行後、MyAdminでDBを確認しても更新されていない。

【phpコード】
<?php
//データベースパラメータ定義
$DBSERVER="localhost";
$DBUSER="root";
$DBPASSWORD="";
$DBNAME="up_load";
$DATANAME="upload_list";

//Mysqlに接続
if(mysql_connect($DBSERVER,$DBUSER,$DBPASSWORD))
{echo "DB接続済/";}
else
{echo "<h2>データベースに接続できません</h2>";die();} //Mysql停止
//データベースを選定
mysql_select_db($DBNAME);
//Mysqlの文字セットを定義
$sql = "SET NAMES ujis;";
$result = mysql_query($sql);
if ($result==true){echo "文字コードSET済/";}

//更新id、rem(更新記事)をSET
$id=15;
$new_rem="ABCDEF";
echo $DATANAME."/".$id."/".$new_rem."/";

//Mysql更新処理
$result=mysql_query('UPDATE $DATANAME SET rem=$new_rem WHERE id=$id;');
if ($result==true){echo "更新!";}
else
{echo "更新出来ず";}

//XAMMP phpMyAdminからは以下のSQL文で更新できた。
//UPDATE upload_list SET rem='ABCDEF' WHERE id=15;
?>
【実行後のブラウザ表示】
DB接続済/文字コードSET済/upload_list/15/ABCDEF/更新出来ず

PHP+MySQLでホームページ開発中ですが、MySQLで特定idのフィールドの更新処理(UPDATE)が出来ません。初心者です宜しくお願いします。
【Mysqlで確認した点】
(1)XAMPP・MyAdminからは以下のSQL文で問題なく更新できる。
"UPDATE upload_list SET rem='ABCDEF' WHERE id=15;"
【問題は?】
以下のphpからは更新できません。
【phpで確認した点は?】
(1)DBへ正常に接続してる。
(2)文字コードも正常にSETしてる。
(3)UPDATE実行後の$RESULT(返り値)がない。
(4)PHPを実行後、MyAdminでDBを確認しても更新...続きを読む

Aベストアンサー

$result=mysql_query('UPDATE $DATANAME SET rem=$new_rem WHERE id=$id;');
の行をきっちりデバッグ用に書き直してください。

(1)SQL文はヒアドキュメントをつかう
(2)テーブルやフィールドはバッククォート、値はシングルクォートでくくる
(3)変数は{$hoge}形式で参照する
(4)SQL文の最後になるべく;はつけない
(5)エラーはmysql_error()で確認する。

$sql=<<<eof
UPDATE `{$DATANAME}`
SET `rem`='{$new_rem}'
WHERE `id`='{$id}'
eof;

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


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

人気Q&Aランキング