アプリ版:「スタンプのみでお礼する」機能のリリースについて

初歩的で恐縮ですが
PHP5,4手続き型で書く場合についてです。

うまくMYSQLにインサートの文章がかけず
or die("データ追加エラー");のエラーの表示しかされず右往左往しています。


<?php

$sv = "mysql.xxx.jp";
$dbname = "bbb";
$user = "bbb";
$pass = "aaa";

$txt="あああ";
$ip="1234";
$ua="mac";

//接続
$link = mysqli_connect($sv, $user, $pass,$dbname);
//クエリ文
$query = "INSERT INTO data1 (txt,ip,ua) VALUES('$txt','$ip','$ua')";
//書込不可ならエラー表示
$result = mysqli_query($link, $query) or die("データ追加エラー");

?>

txt,ip,uaというカラムは作ってあります。そこに各変数のデータを入れたいのです。
ご指摘、添削いただけますとありがたいです。
よろしくお願い致します。

A 回答 (2件)

mysqli_query()で実行するのは変数など渡さないような単純なSQL文です


どうしても変数を渡したい場合は#1さんの指摘するよう
mysqli_real_escape_string()でエスケープ処理をしてください

http://php.net/manual/ja/mysqli.real-escape-stri …

mysqli_系でもプリペアド処理ができるのでそちらを利用する方がいいと思います

http://php.net/manual/ja/mysqli.prepare.php
    • good
    • 0
この回答へのお礼

ありがとうございました。
不理解だったため、大変参考になりました。

お礼日時:2014/09/02 14:29

接続時にエラーになっていたりはしないんですよね?



$link = mysqli_connect($sv, $user, $pass,$dbname) or die('接続エラー');


日本語を扱うなら、mysqli_set_charsetが必須です。

http://www.php.net/manual/ja/mysqli.set-charset. …


あと、データベースに挿入するデータを「エスケープする」という発想はないんですか?

http://www.php.net/manual/ja/mysqli.real-escape- …

$query = sprintf("INSERT INTO data1 (txt,ip,ua) VALUES('%s','%s','%s')", mysqli_real_escape_string($txt), mysqli_real_escape_string($ip), mysqli_real_escape_string($ua));


というか、MySQLiの手続き型ってMySQL関数からの「応急処理的な」書き替えなら仕方ないですが、本来ならオブジェクト型で書く方が楽だと思いますけどね。で、どうせならPDOにしてしまってもいいんじゃないかと思いますけど(MySQLiでないと困ることってそれほどないでしょ)。
    • good
    • 0
この回答へのお礼

仰るとおりですね、PDOで進めました。

貴重な時間に回答頂きありがとうございました。

お礼日時:2014/09/01 15:44

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