Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL select语句中使用php变量_Php_Sql_Sql Server - Fatal编程技术网

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

如何在SQL select语句中使用php变量,php,sql,sql-server,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 = '$

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

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

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

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

最好的方法是:

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

您正在测试$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,但会发布yadda yadda SQL注入、yadda yadda输入验证等

你的问题是:

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

除此之外,您的代码在语法上很好,尽管您应该使用ifisset$_POST['f1']代替if$_POST[fl]==true。

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

警告:使用参数化sql查询可防止sql注入攻击!坏:如果$\u POST[fl]==真更好:ifisset$\u POST['f1']最佳:ifisset$\u POST['f1']和&$q=某种类型的输入验证$\u POST['f1']回波x$y v.s.回波x$y在功能上是相同的。您没有对实际问题进行任何更改。虽然与实际问题无关,但我认为在检查$\u服务器['REQUEST\u METHOD']时使用===是个好主意。
$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();