-2

我想使用 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))
4

5 回答 5

0

最好的方法是:

$stmt    = odbc_prepare($conn1, "SELECT * FROM dbo.Audit WHERE Details = ?");
$success = odbc_execute($stmt, array(PDO::quote($_POST["fl"])));
于 2013-09-23T16:55:25.643 回答
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 注入漏洞。你的代码,即使它正在工作,也只是乞求你的数据库被破坏。

于 2013-09-23T16:55:35.170 回答
0

为了避免明显的反对派,我不会发布任何 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)

于 2013-09-23T16:55:36.123 回答
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();
于 2013-09-23T17:07:09.150 回答
-6

首先,请在将帖子放入 SQL 查询之前对其进行清理。您必须使用 htmlentities 甚至更好的 PDO。

其次,如果您当前的方法不起作用,您可以试试这个:

$sql1 = "SELECT * FROM dbo.Audit WHERE Details = '".$q."'";
于 2013-09-23T16:47:13.930 回答