2012-04-12 9 views
1

mySQLクエリ文字列の書式設定のヘルプが必要です。 jQueryの

<?php 


include 'db_connect.php'; 

mysql_select_db($databaseName, $con); 

$query = "SELECT * FROM .$_POST['tab']. WHERE plant_code = .$_POST['plant_code']"; 

$result = mysql_query($query) or die (mysql_error()); 

$row = mysql_fetch_assoc($result); 

echo json_encode($row); 

?> 

::次のクエリは

PHP "をT_STRINGかT_VARIABLEを期待して、エラーを解析" を返します

$('#profiles_desktops').click(function(){ 
       $.post("php/loadProfile.php", {plant_code : selectedSite, tab : "profiles_desktops"}, function(result){ (do something here...) }); }); 
+0

これはすでにエラーとなっていますが、どの行がチェックされているのでしょうか。 – Michelle

+0

@Jack - 解析エラーは$ query文に含まれています。クエリ文字列に関する何かが間違っていますか? –

+0

あなたは本当にそれらをエスケープするか、PDOを使うべきです。 – ngen

答えて

2

しないでください!それはSQLインジェクション攻撃に対して広く開いています。神のために、あなたの入力を検証し、エスケープしてください。

非常に少なくとも、それを書き換える:

$query = "SELECT * FROM `".mysql_real_escape_string($_POST['tab'])."` WHERE plant_code = '".mysql_real_escape_string($_POST['plant_code'])."'"; 
+0

うん、これはそれをした。 (それらは一重引用符ではありませんが...何の...バッククォートですか?キーボードの〜の下に隠れています) –

+0

これらはバッククォートと呼ばれ、このスレッドでは少し詳しく読むことができます: http://stackoverflow.com/questions/261455/using-backticks-around-field-names –

1

クエリは次のようになります。

"SELECT * FROM ".$_POST['tab']." WHERE plant_code =".$_POST['plant_code'] 
+2

もちろんmysql_real_escape_string()に渡した後です。 – rid

+0

eek、スペース無し!ポスト変数の先頭と末尾に空白がない限り、クエリは失敗します – orourkek

+0

よく調べられました。修正済み: –

1

ピリオド(。 )は引用符を壊さなかったので不要です。これらのいずれかが動作するはずです:

$query = "SELECT * FROM $_POST['tab'] WHERE plant_code = $_POST['plant_code']"; 

または

$query = "SELECT * FROM " . $_POST['tab'] . " WHERE plant_code = " . $_POST['plant_code']; 

編集:これは、もちろん、巨大な注射セキュリティホールに対処されていません:] $query宣言で

0

あなたの連結は間違っています。

$query = "SELECT * FROM " . $_POST['tab'] . "WHERE plant_code = '" . mysql_real_escape_string($_POST['plant_code']) . "'"; 

で十分である。

0

は次のようになります。

二重引用符で囲まれたPHPの変数を持っている(そして最後のオフを残すために必要な
$query = "SELECT * FROM ".$_POST['tab']." WHERE plant_code = ".$_POST['plant_code']; 

、 PHPでは変数を参照してクエリを実行する前に値に変換するため、変数を使用して終了するか、二重引用符ではなく、ドットを省略します。また、sqlは何らかの理由で括弧で囲まれた配列変数を好まない〜を入れるあなたの値もまた読みやすくなります:

$tab = $_POST['tab']; 
$plant = $_POST['plant_code']; 
$query = "SELECT * FROM ".$tab." WHERE plant_code = ".$plant;