0

私は PHP と SQL に非常に慣れていません... SQL コード内で使用されている変数を認識できませんか?

これが完全なコードです。HTMLページから回答された質問への回答をデータベーステーブルに入力しようとしています

助けてください?

<?php

$odbc = mysql_connect ('localhost', 'root', '') or die ("Could not connect to database");
mysql_select_db('Questionaire', $odbc) or die ("can not find database");

$sql;
$quantity = 1;

$id = 222;
$r = 1;
$course = '555';



for ($i = 1; $i < $quantity; $i++)
{   
$answer = $_POST['q'.$r];

if ($answer == 'a')
{
    $sql = "INSERT INTO `questionaire`.`tanswer` (`User`, `QuestionID`, `Answer1`, `Answer2`, `Answer3`, `Answer4`, `Answer5`, `AnswerFreeText`) VALUES (".$id.", ".$i.",       '1', '0', '0',  '0', '0', '')";                         
}

if ($answer == 'b')
{
    $sql = 'INSERT INTO `questionaire`.`tanswer` (`User`, `QuestionID`, `Answer1`, `Answer2`, `Answer3`, `Answer4`, `Answer5`, `AnswerFreeText`) VALUES ('.$id.', '.$i.',               "0", "1", "0",  "0", "0", "")'; 
    echo'<h2> hello </h2>'; 
    $result = mysql_query($sql,$odbc) or die ("can not run query");                 
}

if ($answer == 'c')
{
    $sql = "INSERT INTO `questionaire`.`tanswer` (`User`, `QuestionID`, `Answer1`, `Answer2`, `Answer3`, `Answer4`, `Answer5`, `AnswerFreeText`) VALUES (".$id.", ".$i.",       '0', '0', '1',  '0', '0', '')";     echo $sql;                  
}

if ($answer == 'd')
{
    $sql = "INSERT INTO `questionaire`.`tanswer` (`User`, `QuestionID`, `Answer1`, `Answer2`, `Answer3`, `Answer4`, `Answer5`, `AnswerFreeText`) VALUES (".$id.", ".$i.", '0', '0', '0', '1', '0', '');";                           
}

$r++;

}



?>
4

3 に答える 3

3

PHP と MySQL を初めて使用する場合は、早い段階でベスト プラクティスを学び、クエリ パラメーターを使用する習慣を身につけるとよいでしょう。.これは、 PHP 変数を SQL に連結するために使用するよりもはるかに簡単です。

<?php
$pdo = new PDO(...connection parameters...);

$sql = "INSERT INTO `questionaire`.`tanswer` 
    (`User`, `QuestionID`, `Answer1`, `Answer2`, `Answer3`, `Answer4`, `Answer5`, `AnswerFreeText`) 
    VALUES (?, ?, ?, ?, ?, ?, ?, ?)";

$stmt = $pdo->prepare($sql) 
    or die(print_r($pdo->errorInfo, true));

$values = array($id, $i, 1, 0, 0, 0, 0, '');

$stmt->execute($values) 
    or die(print_r($stmt->errorInfo, true));

コーディングが容易になりSQL インジェクションの脆弱性のリスクを回避できます。

SQL 式の単一のリテラル値の代わりにクエリ パラメータを使用できます。そのため、テーブル名、列名、値のリスト、またはその他の構文にパラメーターを使用することはできません。SQL で単一の文字列または単一の数値を記述する場所のみ。

于 2012-11-02T17:08:03.653 に答える
0

すべての変数を一重引用符で囲む必要があります ("('1', 'John', 'Canada', etc...) のようなものを作成してみてください)。そのためには、次のようなものを使用する必要があります。

"... VALUES ('$id', '$i', '0', etc...)"

ヒント:

二重引用符は、テキストが最初に解析されることを意味します。これにより、変数をテキストに直接統合できます。

i = 1 と仮定すると、次のようになります。

 "i is: $i" == "i is: 1";

ただし、最初に解析せずに使用した直接テキストが必要な場合は、単一の引用符 (') を使用できます。

 'i is: $i' == 'i is: $i' 
于 2012-11-02T17:07:08.163 に答える
0

これはあなたにとってより簡単なものです:

      $query = sprintf("INSERT INTO table " .
               " (id, col1, col2,col3) " .
               " VALUES (NULL, '%s', '%s', '%s');",
               mysql_real_escape_string($val1),
               mysql_real_escape_string($val2),
               mysql_real_escape_string($val3));
于 2012-11-02T17:17:01.653 に答える