2017-07-31 16 views
-1

MySQLテーブルを更新したいとします。数値を入力するとIDが入力されますが、代わりに変数を使用すると機能しません。mysqlクエリIDが変数として機能しない

私がしようとしているのは、HTMLテーブルの要素を列で並べ替えることです。

4列:

$colname = array("Column1", "Column2", "Column3", "Column4"); 

私はすでにURL変数からソートされた要素のIDを取得する:

$strTaskIds = $_GET["taskIds"]; 
// for example: $strTaskIds = "3;1;32_4;5_6;36_34;7" 

は、今私は、2D-配列に文字列を分割し、MySQLのテーブルを更新します。

$arrTaskIds = explode("_", $strTaskIds); 

for($i = 0; $i < count($arrTaskIds); $i++) { 
    $arrIdsPerCol = explode(";", $arrTaskIds[$i]); 

    for($j = 0; $j < count($arrIdsPerCol); $j++) { 
     $sql = "UPDATE tasks SET col='$colname[$i]', rank=$j WHERE id=$arrIdsPerCol[$j]"; 
    } 

    if($conW->query($sql) === TRUE) { 
     $error = 0; 
    } else { 
     $error = 1; 
    } 
} 

変数$arrIdsPerCol[$j]の代わりに番号EG 7を書くと、それは機能します。

書き込み(int)$arrIdsPerCol[$j]は動作しません。

+3

[リトルボビーは](http://bobby-tables.com/)**([スクリプトがSQLインジェクション攻撃のリスクがある]と言うhttp://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)**。 [MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)の[Prepared Statements](http://en.wikipedia.org/wiki/Prepared_statement)について学んでください。 ** [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)**でも安全ではありません! – GrumpyCrouton

答えて

0

私はあなたにエラーメッセージを表示しなかった理由は何もなかったということです。 MySQLテーブルが更新されていないように見えました。
私のコードをかなり長い間主演した後、問題が見つかりました。
私はquery()コードを外側ループに配置しました。しかし、私は内側のループでそれが必要でした。解決 問題:

$arrTaskIds = explode("_", $strTaskIds); 
$error = 0; 

for($i = 0; $i < count($arrTaskIds); $i++) { 
    $arrIdsPerCol = explode(";", $arrTaskIds[$i]); 

    for($j = 0; $j < count($arrIdsPerCol); $j++) { 
    $sql = "UPDATE tasks SET col='$colname[$i]', rank=$j WHERE id=$arrIdsPerCol[$j]"; 
    if($conW->query($sql) === TRUE) { 
    } else { 
     $error = 1; 
    } 
    } 
} 
関連する問題