• 締切済み

perl+mysqlで変数が使えなくて困ってます。

use DBI; $id=1; $nm="gootarou"; $mm="friend"; $user = '***'; $passwd = '***'; $db = 'DBI:mysql:***'; $dbh = DBI->connect($db, $user, $passwd); $sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES ($id,$nm,$mm)"); $sth -> execute; $sth -> finish; $dbh -> disconnect; exit; mysqlの勉強を始めたところでいきなり壁にぶちあたってしまいました^^; googleその他で検索かけてみましたが解決に至りませんでしたので 質問させてください。 >$sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES ($id,$nm,$mm)"); ↑ここの部分を >$sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES ('1','gootarou','friend')"); と直接入力してやれば問題なく登録されるのですが、変数を使うと正常に処理がされません。 数字を変数に代入したものは大丈夫なのですが 英字や二バイト文字を変数に代入したものが問題あるようです。 それぞれのフォームの型はvarchar(100)で設定しています。 ループで一括処理したいのですが変数が使えないことには・・と困ってます。 よろしくお願いします。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

$sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES (" .$id ."," .$nm ."," .$mm .")"); としてもだめですか?

yuroto
質問者

補足

""内に"をいれることでエラーになってしまいました。 試行錯誤していたんですが my.iniに skip-character-set-client-handshake というオプションを追記することで 解決に至りました。 アドバイスいただいた方、ありがとうございました。

  • yama06
  • ベストアンサー率61% (101/164)
回答No.1

$sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES ($id,$nm,$mm)"); が期待の動作をしないのは、 $sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES (1,gootarou,friend)"); と展開されているためです。 prepareを使うなら $sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES (?,?,?)"); とした上で、 $sth->execute($id, $nm, $nn); だったはずです。

yuroto
質問者

補足

回答ありがとうございます。 早速試してみましたところ 同じ挙動でした。 my.iniの設定を default-character-set=sjis としているのですが どうも日本語の二バイト文字が入ると 正常に処理がなされないようです。

関連するQ&A