我想使用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))
答案 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."'";