Windows 7 Ultimate で PHP 5.3.24 (XAMPP パッケージ) と Microsoft SQL Server Express 2012 を実行しています。
多肢選択式テスト用の問題バンクを作成するためのフォームを作成しました。質問を送信しようとすると、次のエラーが表示されます。
配列 ( [0] => 配列 ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 [コード] => -14 [2] => 無効なパラメーターが sqlsrv_query に渡されました。 [メッセージ] => 無効なパラメーターが sqlsrv_query に渡されました。) )
フォームからの投稿データを処理する PHP ファイルで使用するコードは次のとおりです。
<?PHP
//section 1: define variables from post and clean up for posting.
$Question = $_POST['Question'];
$Question = trim(stripslashes(str_replace("'", "''", $Question)));
$Answer1 = $_POST['Answer1'];
$Answer1 = trim(stripslashes(str_replace("'", "''", $Answer1)));
$Answer2 = $_POST['Answer2'];
$Answer2 = trim(stripslashes(str_replace("'", "''", $Answer2)));
$Answer3 = $_POST['Answer3'];
$Answer3 = trim(stripslashes(str_replace("'", "''", $Answer3)));
$Answer4 = $_POST['Answer4'];
$Answer4 = trim(stripslashes(str_replace("'", "''", $Answer4)));
$Answer5 = $_POST['Answer5'];
$Answer5 = trim(stripslashes(str_replace("'", "''", $Answer5)));
$Answer6 = $_POST['Answer6'];
$Answer6 = trim(stripslashes(str_replace("'", "''", $Answer6)));
$Answer7 = $_POST['Answer7'];
$Answer7 = trim(stripslashes(str_replace("'", "''", $Answer7)));
$Answer8 = $_POST['Answer8'];
$Answer8 = trim(stripslashes(str_replace("'", "''", $Answer8)));
$Answer9 = $_POST['Answer9'];
$Answer9 = trim(stripslashes(str_replace("'", "''", $Answer9)));
$Answer10 = $_POST['Answer10'];
$Answer10 = trim(stripslashes(str_replace("'", "''", $Answer10)));
$QuestionNotes = $_POST['QuestionNotes'];
$QuestionNotes = trim(stripslashes(str_replace("'", "''", $QuestionNotes)));
$CorrectAnsw = $_POST['CorrectAnsw'];
$ProgramArea = $_POST['ProgramArea'];
$Difficulty = $_POST['Difficulty'];
//section 2: define sql statement
$sql= ("INSERT INTO TESTDB.dbo.tblTestQuestions
(Question,Answer1,Answer2,Answer3,Answer4,Answer5,
Answer6,Answer7,Answer8,Answer9,Answer10,CorrectAnsw,
ProgramArea,Difficulty,QuestionNotes,Inactive)
VALUES
( '" . $Question . "','" . $Answer1 . "','" . $Answer2 . "','" . $Answer3 . "','" . $Answer4 . "',
'" . $Answer5 . "','" . $Answer6 . "','" . $Answer7 . "','" . $Answer8 . "','" . $Answer9 . "',
'" . $Answer10 . "'," . $CorrectAnsw . "," . $ProgramArea . "," . $Difficulty . ",
'" . $QuestionNotes . "',0)");
//section 3: call db connnection and post to database
include('C:/webincludes/dbconnect.php'); //this include defines $conn and has been tested to work
//fine and I use it on dozens of other forms that work fine.
if (!SQLSRV_query($conn,$sql))
{die( print_r( sqlsrv_errors(), true));} echo "Record Added";
SQLSRV_close($conn);
//section 4: I added the following to display the variables to see what is being passed to the sql server.
// To use it, I comment out section 3 and try to submit again.
echo "
<html><body><br><font face='calibri' size='5'><b>Output as follows: </font></b><br>
Question: " . $Question . "<br>
Ans1: " . $Answer1 . "<br>
Ans2: " . $Answer2 . "<br>
Ans3: " . $Answer3 . "<br>
Ans4: " . $Answer4 . "<br>
Ans5: " . $Answer5 . "<br>
Ans6: " . $Answer6 . "<br>
Ans7: " . $Answer7 . "<br>
Ans8: " . $Answer8 . "<br>
Ans9: " . $Answer9 . "<br>
Ans10: " . $Answer10 . "<br>
Correct Answ: " . $CorrectAnsw . "<br>
Area: " . $ProgramArea . "<br>
Level: " . $Difficulty . "<br>
Notes: " . $QuestionNotes . "<br>
<b>SQL Statement:</b><br>
" . $sql . "<br>
" . $stmt . "<br>
</font></body></html>
";
exit;
?>
データを送信すると、上記のエラーが発生します。実際に SQL スクリプトを実行するセクション 3 をコメントアウトし、データを投稿して表示すると、次のようになります。
次のように出力します: 質問:荷物を積んでいない ツバメの対気速度は
? アフリカかヨーロッパか?
Ans3: 青、いいえ、yelloooooooooooooow
Ans4: 植え込み!
Ans5: ニ!
Ans6: 大いなる危険!
Ans7: Robins minsterals
Ans8: あなたの母親はハムスターで、あなたの父親はエルダーベリーのにおいがしました。
Ans9: 唯一のモデル
Ans10: あなたへのメッセージです。
正解: : 2
エリア: 10
レベル: 3
備考: 私たちは言う騎士です. に!
SQL ステートメント:
INSERT INTO CAR.dbo.tblTestQuestions (Question,Answer1,Answer2,Answer3,Answer4,Answer5, Answer6,Answer7,Answer8,Answer9,Answer10,CorrectAnsw,ProgramArea,Difficulty,QuestionNotes,Inactive) VALUES ( '対気速度は?荷物を積んでいないツバメ','43 bpm','どういう意味ですか? アフリカですか、それともヨーロッパですか?','青、黄色はありません','植え込みです!','Ni!','Great Peril!','Robins minsterals', 「あなたのお母さんはハムスターで、あなたのお父さんはエルダーベリーのにおいがしました。」、「それはただのモデルです」、「あなたへのメッセージです、先生!」、2,10,3、「私たちは言う騎士です... Ni!」 ,0)
その sql ステートメントを取得して管理コンソールで実行すると、データが正常に挿入されます。しかし、Web ページから実行しようとすると、エラーが発生します。
私は当惑しています。初心者を許してください、しかしどこが間違っているのですか?