SQL查询失败,变量

时间:2019-01-15 12:21:50

标签: php mysql sql ssms php-7

我是PHP的新手,我确定我缺少基本的细节。当我在SSMS中投射此查询时,它可以正常工作。如果我在PHP中完全像这样键入它,它也将起作用。

enter image description here

但是在我的代码中,如果我使用变量$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”中键入的值与图片查询中使用的值相同。 我找不到任何错误,所以我不知道问题出在哪里。如果我需要提供更多信息,请询问,希望我们可以解决。

谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

请记住,您的代码确实可以进行sql注入。如果您不想将来遇到任何问题,请尝试使用准备好的语句。进一步了解here

答案 1 :(得分:1)

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

替换此:

gq_article

使用:

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