如何在SQL select语句中使用php变量

时间:2013-09-23 16:44:55

标签: php sql sql-server

我想使用php从sql server获取一些数据,但是sql似乎没有读取php变量

<?php
$q = $_POST["fl"];
echo $foo;
if ($_POST["fl"] == true);
{
$conn1=odbc_connect('SQLDB','','');
if (!$conn1)
{exit("Connection Failed: " . $conn1);}

 $sql1= "SELECT * FROM dbo.Audit WHERE Details = '$q'";
 $rs1=odbc_exec($conn1,$sql1);
 if (!$rs1)
 {exit("Error in SQL");}
while (odbc_fetch_row($rs1))

5 个答案:

答案 0 :(得分:0)

最好的方法是:

$stmt    = odbc_prepare($conn1, "SELECT * FROM dbo.Audit WHERE Details = ?");
$success = odbc_execute($stmt, array(PDO::quote($_POST["fl"])));

答案 1 :(得分:0)

您正在测试$ q是否存在错误。你应该有更多的东西:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   if (isset($_POST['fl'])) {
        $q = $_POST['fl'];
        $sql = "SELECT ... WHERE Details = '$q'":
        etc..
   } else {
       die("No fl value was passed");
   }
}

另请注意,我尚未更正您的SQL injection vulnerability。你的代码,即使它正在工作,只是乞求让你的数据库被破坏。

答案 2 :(得分:0)

为了避免明显的downvote派对,我不会发布任何SQL,但yadda yadda SQL注入,yadda yadda输入验证等。

你的问题是:

if ($_POST["fl"] == true); //<-- this semicolon, get rid of it
{
$conn1=odbc_connect('SQLDB','','');

除了你的代码语法之外,你 应该使用if(isset($_POST['f1']))代替if ($_POST["fl"] == true)

答案 3 :(得分:0)

您可以使用PDO对象对数据库进行选择查询....

$q = $_POST['fl'];
$pdo=new PDO('mysql:host=localhost;dbname=databasename','username','password');
$query="select * from dbo.Audit WHERE Details = :q;";
$result=$pdo->prepare($query);
$result->bindValue(':q',$q);
$result->execute();

答案 4 :(得分:-6)

首先,请先将帖子清理,然后再将其放入SQL查询中。 你必须使用htmlentities甚至更好,PDO。

其次,如果你当前的那个不起作用,你可以试试这个:

$sql1 = "SELECT * FROM dbo.Audit WHERE Details = '".$q."'";