1

Admissions & Registration部門名 (つまり、 )を含む SQL Server テーブルがありWomen's Softball coach、ページのリンクをクリックすると、その部門のすべての従業員がプルされますが、プルするWomen's Softball coachと、次のようなエラーが発生します。

PHP 警告: mssql_query() [function.mssql-query]: >メッセージ: 1 行目: 's' 付近の構文が正しくありません。(重大度 15) >C:\Inetpub\wwwroot\DACC\directory\dept.php の 179 行目

PHP 警告: mssql_query() [function.mssql-query]: >message: 文字列 ') ORDER BY Lastname' の前に引用符が閉じられていません。>>>(重大度 15) C:\Inetpub\wwwroot\DACC\directory\dept.php の 179 行目

PHP 警告: mssql_query() [function.mssql-query]: >C:\Inetpub\wwwroot\DACC\directory\dept.php 行 179 でクエリが失敗しました

PHP 警告: mssql_query() [function.mssql-query]: メッセージ: 5 行目: 's' 付近の構文が正しくありません。(重大度 15) >C:\Inetpub\wwwroot\DACC\directory\dept.php の 195 行目

PHP 警告: mssql_query() [function.mssql-query]: >message: 文字列 'ORDER BY directory.LastName' の前の引用符が閉じられていません。(重大度 15) C:\Inetpub\wwwroot\DACC\directory\dept.php > 195 行目

これは特殊文字のエスケープに関する問題であることはわかっていますが、クエリでそれを行う方法はありますか、それともテーブルで行う必要がありますか?

上記のコードはこちら --->

$department = $_GET['dept'];

// This will evaluate to TRUE so the text will be printed.
if (isset($department)) {

 // Send a select query to MSSQL

$query = mssql_query("SELECT * FROM directory WHERE department IN (SELECT id FROM     departments WHERE name='$department') ORDER BY Lastname");

クエリの実行方法は次のとおりです。

   function listDepts() { 

    $query = "SELECT DISTINCT name FROM departments ORDER BY name"; 
    $result = mssql_query($query); 
    echo "<h3>Please select a department:</h3>\n"; 
    echo "<ul>\n"; 

    for ($i=0; $i<mssql_num_rows($result); $i++) { 
        $info = mssql_fetch_assoc($result); 
        echo "<li><a href=\"dept.php?dept=$info[name]\">$info[name]</a></li>\n"; 
    } 

    echo "</ul>\n\n"; 
}

部門リストを生成するコードは次のとおりです。

 function listDepts() {

$query = "SELECT DISTINCT  name FROM     departments ORDER BY     name";
$result = mssql_query($query);

echo "<h3>Please select a department:</h3>\n";
echo "<ul>\n";

for ($i=0; $i<mssql_num_rows($result); $i++) {
    $info = mssql_fetch_assoc($result);
    echo "<li><a href=\"dept.php?dept=$info[name]\">$info[name]</a></li>\n";
}

echo "</ul>\n\n";

 }
4

1 に答える 1

1

準備済みステートメントを使用してから、変数を使用して実行することを強くお勧めします。

$stmt = $dbh->prepare("SELECT * FROM directory WHERE department IN (SELECT id FROM departments WHERE name=?) ORDER BY Lastname");
if ($stmt->execute(array("Women's Softball coach"))) {
    while ($row = $stmt->fetch()) {
        print_r($row);
    }
}

詳細については、準備済みステートメントに関する PHP ドキュメントを参照してください。

あなたの特定のケースでは、次のようなものがあります:

$stmt = $dbh->prepare("SELECT * FROM directory WHERE department IN (SELECT id FROM departments WHERE name=?) ORDER BY Lastname");
for ($i=0; $i<mssql_num_rows($result); $i++) {
    if ($stmt->execute(array($result))) {

        $info = $stmt->fetch(); 
        ...
} 
于 2012-08-28T14:00:29.053 に答える