Php 会话变量在MySQL语句中不起作用

Php 会话变量在MySQL语句中不起作用,php,mysql,Php,Mysql,我试图在SQL语句中使用session变量($\u session['asc\u id'],它包含一些值,如“AS0027001”),但它不起作用。 当我硬编码该值时,它会提供结果 谁能纠正我一下吗 MySQL查询不起作用 $asc_id = $_SESSION['asc_id']; $rs = mysql_query('select asc_lastname, asc_firstname, asc_middlename, lname_fname_dob

我试图在SQL语句中使用session变量(
$\u session['asc\u id']
,它包含一些值,如“AS0027001”),但它不起作用。 当我硬编码该值时,它会提供结果

谁能纠正我一下吗

MySQL查询不起作用

$asc_id = $_SESSION['asc_id'];

$rs = mysql_query('select asc_lastname, asc_firstname, asc_middlename, lname_fname_dob
                     from issio_asc_workers where asc_user_type = 31
                      and asc_id  = "$asc_id"
                      and lname_fname_dob like "' .
                      mysql_real_escape_string($_REQUEST['term']) .
                      '%"  order by lname_fname_dob asc limit 0,10', $dblink);
$rs = mysql_query('select asc_lastname, asc_firstname, asc_middlename, lname_fname_dob 
                     from issio_asc_workers where asc_user_type = 31
                      and asc_id  = "AS0027001" and lname_fname_dob like "' .
                      mysql_real_escape_string($_REQUEST['term']) .
                      '%"  order by lname_fname_dob asc limit 0,10', $dblink);
正在运行的Mysql查询

$asc_id = $_SESSION['asc_id'];

$rs = mysql_query('select asc_lastname, asc_firstname, asc_middlename, lname_fname_dob
                     from issio_asc_workers where asc_user_type = 31
                      and asc_id  = "$asc_id"
                      and lname_fname_dob like "' .
                      mysql_real_escape_string($_REQUEST['term']) .
                      '%"  order by lname_fname_dob asc limit 0,10', $dblink);
$rs = mysql_query('select asc_lastname, asc_firstname, asc_middlename, lname_fname_dob 
                     from issio_asc_workers where asc_user_type = 31
                      and asc_id  = "AS0027001" and lname_fname_dob like "' .
                      mysql_real_escape_string($_REQUEST['term']) .
                      '%"  order by lname_fname_dob asc limit 0,10', $dblink);

变量替换仅适用于双引号字符串,而不是单引号字符串。换句话说,你应该这样做

$rs = mysql_query("select .... and asc_id  = '$asc_id' and ... limit 0,10", $dblink);

顺便说一句,您确实确保该值不包含任何可能导致SQL注入的字符,对吗?否则,在将mysql\u real\u escape\u字符串插入到查询中之前,您应该使用mysql\u real\u escape\u字符串进行确认。

变量替换仅适用于双引号字符串,而不是单引号字符串。换句话说,你应该这样做

$rs = mysql_query("select .... and asc_id  = '$asc_id' and ... limit 0,10", $dblink);

顺便说一句,您确实确保该值不包含任何可能导致SQL注入的字符,对吗?否则,在将mysql\u real\u escape\u字符串插入查询之前,您应该使用mysql\u real\u escape\u字符串进行确认。

打印字符串时,字符串将被清除。当问题被重新格式化以使SQL可读时,问题就清楚了。(调试SQL语句的第一条规则是“打印字符串”。第二条规则是将SQL语句放入一个字符串中,然后传递给SQL函数,这会更容易地遵守第一条规则。)


您可以使用
符号将请求
术语
嵌入字符串中;您不能使用它将
$asc\u id
嵌入到字符串中。您还应该在会话ID值上使用
mysql\u real\u escape\u string()
,以防止SQL注入。

打印字符串时,它将被清除。当问题被重新格式化以使SQL可读时,问题就清楚了。(调试SQL语句的第一条规则是“打印字符串”。第二条规则是将SQL语句放入一个字符串中,然后传递给SQL函数,这会更容易地遵守第一条规则。)


您可以使用
符号将请求
术语
嵌入字符串中;您不能使用它将
$asc\u id
嵌入到字符串中。您还应该在会话ID值上使用
mysql\u real\u escape\u string()
,以防止SQL注入。

首先打印变量$asc\u ID。如果不显示任何内容,则会话不可用。在这种情况下,您错过了当前执行页面顶部的会话_start()

在SQL查询中,不能替换单引号字符串中的变量值。 使用用于将字符串值与变量混合或使用双引号字符串的符号。我喜欢第一个

对于故障排除,最简单的方法是打印变量值。从结果中,您将了解缺少了什么


谢谢

首先打印变量$asc\u id。如果不显示任何内容,则会话不可用。在这种情况下,您错过了当前执行页面顶部的会话_start()

在SQL查询中,不能替换单引号字符串中的变量值。 使用用于将字符串值与变量混合或使用双引号字符串的符号。我喜欢第一个

对于故障排除,最简单的方法是打印变量值。从结果中,您将了解缺少了什么


谢谢,试试这个。根据您添加的评论,我对其进行了如下修改

session_start(); //add this if you did not do it yet

$asc_id = $_SESSION['asc_id'];

$rs = mysql_query("select asc_lastname, asc_firstname, asc_middlename, lname_fname_dob
                 from issio_asc_workers where asc_user_type = 31
                  and asc_id  = '$asc_id'
                  and lname_fname_dob like '".
                  mysql_real_escape_string($_REQUEST['term']) .
                  "%'  order by lname_fname_dob asc limit 0,10", $dblink);

试试这个。根据您添加的评论,我对其进行了如下修改

session_start(); //add this if you did not do it yet

$asc_id = $_SESSION['asc_id'];

$rs = mysql_query("select asc_lastname, asc_firstname, asc_middlename, lname_fname_dob
                 from issio_asc_workers where asc_user_type = 31
                  and asc_id  = '$asc_id'
                  and lname_fname_dob like '".
                  mysql_real_escape_string($_REQUEST['term']) .
                  "%'  order by lname_fname_dob asc limit 0,10", $dblink);

会话_start();在PHP脚本的第一行…
session变量($\u session['asc\u id'],它包含一些值,如“AS0027001”)
——您认为它为什么会这样?在使用它之前调用session\u start()了吗?session\u start();在PHP脚本的第一行…
session变量($\u session['asc\u id'],它包含一些值,如“AS0027001”)
——你认为它为什么会这样?在使用它之前调用session\u start()了吗?我像这样更改了查询,但它不起作用$rs=mysql\u查询(“选择asc\u pa\u lastname、asc\u pa\u firstname、asc\u pa\u dob、lname\u fname\u dob from issio\u asc\u patient,其中asc\u id='mysql\u real\u escape\u string($ascid')和lname\u fname\u dob like'”.mysql\u real\u escape\u string\u string($REQUEST['term')).“%”按lname\u fname\u fname\u dob订购asc限制0,10“,$dblink)@Devswa您需要添加第一个mysql\u real\u escape\u字符串,就像正确添加第二个一样;尝试$rs=mysql\u查询(“选择asc\u pa\u lastname、asc\u pa\u firstname、asc\u pa\u dob、lname\u fname\u dob from issio\u asc\u asc\u id=”。mysql\u real\u escape\u string($asc\u id)。“'和lname\u fname\u dob like'。mysql\u real\u escape\u string($REQUEST['term'])。“%按lname\u fname\u fname\u dob排序asc限制0,10”,$dblink);我这样更改了我的查询,但它不起作用$rs=mysql\u查询(“选择asc\u pa\u lastname、asc\u pa\u firstname、asc\u pa\u dob、lname\u fname\u dob from issio\u asc\u patient,其中asc\u id='mysql\u real\u escape\u string($ascid')和lname\u fname\u dob like'”.mysql\u real\u escape\u string\u string($REQUEST['term')).“%”按lname\u fname\u fname\u dob订购asc限制0,10“,$dblink)@Devswa您需要添加第一个mysql\u real\u escape\u字符串,就像正确添加第二个一样;尝试$rs=mysql\u查询(“选择asc\u pa\u lastname、asc\u pa\u firstname、asc\u pa\u dob、lname\u fname\u dob from issio\u asc\u asc\u id=”。mysql\u real\u escape\u string($asc\u id)。“'和lname\u fname\u dob like'。mysql\u real\u escape\u string($REQUEST['term'])。“%按lname\u fname\u fname\u dob排序asc限制0,10”,$dblink);