Php 在WHERE子句中使用变量

Php 在WHERE子句中使用变量,php,mysql,Php,Mysql,我是MySQL和PHP的新手。我有一个HTML表单,其中我想将1个变量从传递到我的PHP代码,然后在我的数据库上运行一个查询,查找在“Serial”列下保存该变量的记录。当我硬编码我想查找的“串行”时,我可以很好地运行它,但是当我尝试使用变量时,我得到了一个错误 任何帮助都将不胜感激!或者是更好的方法 这是我的错误:“where子句”中的未知列“amg002” 这是我的密码 $serial= $_POST['Serial']; echo $serial; //Connect To Databa

我是MySQL和PHP的新手。我有一个HTML表单,其中我想将1个变量从传递到我的PHP代码,然后在我的数据库上运行一个查询,查找在“Serial”列下保存该变量的记录。当我硬编码我想查找的“串行”时,我可以很好地运行它,但是当我尝试使用变量时,我得到了一个错误

任何帮助都将不胜感激!或者是更好的方法

这是我的错误:“where子句”中的未知列“amg002”

这是我的密码

$serial= $_POST['Serial'];
echo $serial;

//Connect To Database

$link = mysql_connect($hostname,$username, $password) OR DIE ('Unable to connect to database! Please try again later.');
echo "Connected to MySQL<br />";

//Select the database - 'SiteInfo'

// Collects data from "SiteInfo" table

//****This is where I am running into the error*** 

$sql = 'SELECT * FROM `SiteInfo` WHERE `Serial` ='.$serial; 

// This works!!!

//$sql = 'SELECT * FROM `SiteInfo` WHERE `Serial` ="amg002";';   

$data = mysql_query($sql)
or die(mysql_error());

// puts the "SiteInfo" info into the $info array

$info = mysql_fetch_array( $data );

//Print out the contents of the entry

echo "Site Name: ".$info['SiteName'] . "<br /";
Print "Serial Number: ".$info['Serial'] . "<br />";
Print "Location: ".$info['Location'] . "<br />";

// Close the database connection

mysql_close($link); 
echo "Connection Closed. <br />";

看起来像是报价问题:

 $sql = 'SELECT * FROM `SiteInfo` WHERE `Serial` ='.$serial.'; 
应该是

 $sql = "SELECT * FROM `SiteInfo` WHERE `Serial` ='".$serial."'"; 

看起来像是报价问题:

 $sql = 'SELECT * FROM `SiteInfo` WHERE `Serial` ='.$serial.'; 
应该是

 $sql = "SELECT * FROM `SiteInfo` WHERE `Serial` ='".$serial."'"; 

它表示您的变量:

$_POST['Serial']
空无一人。如果代码不是空的,则需要通过isset检查代码,如下所示:

if (isset( $_POST['Serial'])) {
  $serial= $_POST['Serial'];

  // your rest of the code
}
此外,如果序列号是字符串而不是数字,则需要将其置于引号中,请使用以下查询:

$sql = "SELECT * FROM `SiteInfo` WHERE `Serial` = '$serial'"; 
您还可以查看您的查询结果:

$sql = "SELECT * FROM `SiteInfo` WHERE `Serial` = '$serial'"; 
echo $sql;
exit;

它表示您的变量:

$_POST['Serial']
空无一人。如果代码不是空的,则需要通过isset检查代码,如下所示:

if (isset( $_POST['Serial'])) {
  $serial= $_POST['Serial'];

  // your rest of the code
}
此外,如果序列号是字符串而不是数字,则需要将其置于引号中,请使用以下查询:

$sql = "SELECT * FROM `SiteInfo` WHERE `Serial` = '$serial'"; 
您还可以查看您的查询结果:

$sql = "SELECT * FROM `SiteInfo` WHERE `Serial` = '$serial'"; 
echo $sql;
exit;

我同意这是一个报价问题,但下面是我的代码的外观

  $sql = 'SELECT * FROM SiteInfo WHERE Serial = "' . $serial . '"';


我同意这是一个报价问题,但下面是我的代码的外观

  $sql = 'SELECT * FROM SiteInfo WHERE Serial = "' . $serial . '"';


看看$serial周围的引号。建议使用单引号,因为它们不受ANSI_引号设置的影响。我对引号做了一些更改,如上所述。现在试试。看看$serial周围的引号。建议使用单引号,因为它们不受ANSI_引号设置的影响。如上所述,我对引号做了一些更改。现在就试试。最好放弃过时的mysql_uuu函数,转而使用提供参数化查询的库,例如PDO或mysqli。你很容易受到攻击。在阅读相关内容并了解如何预防之前,不要继续使用此代码。最好放弃过时的mysql_uu函数,转而使用提供参数化查询的库,例如PDO或mysqli。您很容易受到攻击。在阅读相关内容并了解如何防止之前,不要继续使用此代码。除非序列号是字符串,否则没有引号问题。@Sarfraz,从他的工作示例来看,我认为这是一个安全的假设。除非序列号是字符串,否则没有引号问题。@Sarfraz,从他的工作示例来看,我认为这是一个安全的假设。我附和顶部的$serial,它似乎通过了测试。我还按照建议在代码周围添加了if语句,但仍然存在与上述相同的错误。@user1424236:尝试我在答案中发布的查询。复制并使用它。我在顶部回显$serial,它似乎通过了测试。我还按照建议在代码周围添加了if语句,但仍然存在与上述相同的错误。@user1424236:尝试我在答案中发布的查询。复制它并使用它。