- 締切済み
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)で設定しています。 ループで一括処理したいのですが変数が使えないことには・・と困ってます。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- moon_night
- ベストアンサー率32% (598/1831)
$sth = $dbh->prepare("INSERT INTO list (id,name,memo) VALUES (" .$id ."," .$nm ."," .$mm .")"); としてもだめですか?
- yama06
- ベストアンサー率61% (101/164)
$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); だったはずです。
補足
回答ありがとうございます。 早速試してみましたところ 同じ挙動でした。 my.iniの設定を default-character-set=sjis としているのですが どうも日本語の二バイト文字が入ると 正常に処理がなされないようです。
補足
""内に"をいれることでエラーになってしまいました。 試行錯誤していたんですが my.iniに skip-character-set-client-handshake というオプションを追記することで 解決に至りました。 アドバイスいただいた方、ありがとうございました。