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