お世話になります。
phpでmysql を操作する際、mysqliを使っています。
POSTで受け取ったデータをinsertする際、どんなコードが良いのかと調べていくと、推薦されてない事が分かり、mysqliはそのままで、プリペアドステートメントを使ったコードを試しているところです。
2点、質問させてください。
■1点目
以下は実際のコードですが、$expや$nameに入った日本語の文字列が登録出来ません。
何処がおかしいのでしょうか?
<?php $host = "localhost"; $username = "**********"; $password = "**********"; $dbname = "**********"; $mysqli = new mysqli($host, $username, $password, $dbname); $mysqli->set_charset("utf8"); if ($mysqli->connect_error) { error_log($mysqli->connect_error); exit; } $name = "takeshi"; $price = "1234"; $exp = "satoshi"; $date = date("Y-m-d H:i:s"); // SQL文の作成 $stmt = $mysqli->prepare("INSERT INTO gc_granola ( name, price, exp, modify_datetime, create_datetime ) VALUES ( ?, ?, ?, ?, ? )"); // パラメータを設定 $stmt->bind_param( 'sisss', $name, $price, $exp, $date, $date); // 実行 $res = $stmt->execute(); $stmt->close(); ?>
table
CREATE TABLE `gc_granola` ( `name` varchar(255) NOT NULL, `price` int(11) NOT NULL, `exp` text NOT NULL, `modify_datetime` datetime NOT NULL, `create_datetime` datetime NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
■2点目
今回プリペアドステートメントにてinserat文を用意しようと考えたきっかけは冒頭に申し上げた通り、POSTなどで受け取ったデータをinsertする際の処理に悩んでいたからですが、上記スクリプトで、(日本語は無理だが半角英数は登録できるので)SQL文で使われる各種記号を用いた文字列を変数に入れ、insertを実行したところ、代入した文字列がそのまま登録されています。
これは正常にプリペアドステートメントが機能していないということなのでしょうか?それとも、プリペアドステートメントはinsertする際に正常に行うためのものであり、文字列はエンコードされるものではないのでしょうか?
以上ご教示願えれば幸いです。
よろしくお願いいたします。
補足:
ご質問ありがとうございます。
POSTデータをinsertするためにとプリペアドステートメントを触り始めたのですが、まずは変数に入れたデータが登録されるか?というレベルで動かしてる状況ですが、同じ変数でも半角英数だと登録でき、日本語だと登録できないという状況となっています。
アドバイスいただけれれば幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー