sql 查询因变量失败

sql query fails with variable

我是 PHP 的新手,我确信我遗漏了一个基本细节。当我在 SSMS 中执行此查询时,它工作正常。如果我在 PHP.

中完全像这样输入它,它也会起作用

但是在我的代码中,如果我使用变量 $barcodevar 而不是静态值 'x'。查询停止工作。 这是我的代码:

<html>
<input class="input" type="text" name="uid"><br>
<input type="submit" name="submit" value="Submit">    
<?php                              
    if(isset($_POST['submit'])){
    }
        $barcodevar = $_POST['uid'];  
        $serverName = "butterserver";
        $connectionInfo = array("Database"=>"flowers", "UID"=>"buttercup", "PWD"=>"Admin123");
        $conn = sqlsrv_connect( $serverName, $connectionInfo);
        if($conn){
            if($barcodevar == ""){
               echo "field is empty" ;    
            }
            $sql = "SELECT SupplierLotID FROM FactsLot WHERE ID = $barcodevar";
            $stmt = sqlsrv_query( $conn, $sql);
            while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
                echo $row['SupplierLotID']."<br />";
            } 
            sqlsrv_free_stmt( $stmt );
            sqlsrv_close( $conn );
        }
        else{
            echo "no connection";
        }                             
    ?>
</html

回显后$barcodevar我可以看到我在“uid”中输入的值与图片查询中使用的值相同。 我找不到任何错误,所以我不知道问题出在哪里。如果有任何我应该提供的更多信息请询问,我希望我们能解决这个问题。

谢谢。

$sql = "SELECT SupplierLotID FROM FactsLot WHERE ID = '$barcodevar'";

就像您在 SSMS 中尝试的示例一样,ID 值在单引号内。您也必须对 php 变量执行相同的操作。

请记住,您的代码确实对 sql 注入开放。如果您不想将来出现任何问题,请尝试使用准备好的语句。阅读更多相关信息 here

在单引号之间包含变量 $barcodevar。

替换为:

$sql = "SELECT SupplierLotID FROM FactsLot WHERE ID = $barcodevar";

与:

$sql = "SELECT SupplierLotID FROM FactsLot WHERE ID = '$barcodevar'";