2016-08-02 2 views
0

次のクエリを実行して、テーブルのレコードを更新しようとしています。PHP MySQLアップデートクエリが失敗する

require "conn.php"; 

$user_name = $_POST["username"]; 
$code = $_POST["code"]; 
$name = $_POST["groupname"]; 

echo "$user_name, $code, $name"; 

$sql_update = "UPDATE users SET group = '$name' WHERE username = '$user_name'"; 

if ($conn->query($sql_update) === TRUE) { 
echo "success"; 
} 
else { 
echo "fail"; 
} 

クエリが失敗し、理由がわかりません。接続が行われ、私はユーザー名コードと名前をエコーすることができます。それがうまくいかない理由はありますか?

+0

何クラスのインスタンスconn' '$のですか?そして、あなたはこのコードがSQLインジェクションに対して脆弱であることを知っていますか? –

+0

通常、少なくともPDOの ' - > query'は' false'か結果セットを返しますが、決して 'true'を返しません。だから、ここでは単純なエラーかもしれません...(私はmysqliも同じことを信じています)。また、エラーの場合には 'echo $ conn-> error'(mysqli)または' print_r($ conn-> errorInfo()) '(PDO)を(デバッグの目的とdevelのためだけに)行うことができます。 ** – Jakumi

+0

$ connは、データベース名、ユーザー名、パスワード、およびサーバー名を定義するpublic_htmlフォルダ内の別のファイルです。これは私の初めてのPHPを使用していると私は注射に固定することに精通していないよ。非常に基本的なアプリだと私が気にする必要があるかどうかは分かりません。おそらく公開する予定はありません。 –

答えて

0

あなたのコードという名前のpublic_htmlフォルダ外のファイルを作成します

require_once("conn.php"); 
$user_name = $conn->real_escape_string($_POST["username"]); 
$code = $conn->real_escape_string($_POST["code"]); 
$name = $conn->real_escape_string($_POST["groupname"]); 
$sql_update = $conn->prepare("update `users` set `group` = ? where `username` = ?"); 
$sql_update->bind_param("ss",$name,$user_name); 
$sql_update->execute(); 
$sql_update->close(); 
$conn->close(); 

そしてconn.phpファイルはこの

$config = parse_ini_file('config.ini'); // Connection infos. 
$conn = mysqli_connect('localhost',$config['username'],$config['password'],$config['db_name']); 
if($conn === false) { 
die("Something was wrong ! Please try again later."); // Error if connection not ok. 
} 
$conn->set_charset("utf8"); 

ようにする必要があり、準備された文で、このコードで

ルックを確保されていません接続データを書き込むconfig.ini

[db_connection] 
username = username 
password = password 
db_name = dbname 

この関数は、パラメータをSQLクエリにバインドし、パラメータが何であるかをデータベースに通知します。 "sss"引数は、パラメータが持つデータの種類を示します。 s文字は、パラメータが文字列であることをmysqlに伝えます。

引数は4種類のものであってもよい:

i - integer 
d - double 
s - string 
b - BLOB 

はこちらをご覧くださいhere

+1

このコードをテストしましたか?クエリに大きな構文エラーがあります。さらに、OPコードの単純な修正は、予約されたMySQLの単語である列名をエスケープすることでした。それが本当の問題です。 –

+0

はいこのコードをテストしても動作します 私のコードで何が間違っていますか? –

+1

これで編集しました。あなたは私が何を意味しているかを見て/理解しました。 –

関連する問題