我尝试根据存储的网址进行选择,但它无法正常工作:
$data=$db->fetch_all_array('select * from recs WHERE urlref = ".$URL."');
如果我对其工作的URL进行硬编码。 E.g:
$data=$db->fetch_all_array('select * from recs WHERE urlref = "http://www.domain.com/folder1/folder2/"');
我的$ URL变量很好。如果我回应它,我会在urlref下获得数据库中的精确字符串。
我已经尝试了单引号和双引号和点的每种可能组合来嵌入变量。有任何想法吗?
答案 0 :(得分:4)
这样做:
$data=$db->fetch_all_array("select * from recs WHERE urlref = '".$URL."'");
始终确保在SQL查询中为字符串值添加引号。否则他们无法正确解释。
另外,请确保在使用用户输入时,$URL
变量可以防止SQL注入。否则我可以轻松提交这样的网址:
' OR '1'='1
它将返回所有记录。在维基百科上了解有关SQL injections的更多信息。
答案 1 :(得分:1)
您没有正确转义字符串文字。您需要使用与用于分隔它的相同引号标记样式来转义它:
$data = $db->fetch_all_array('select * from recs WHERE urlref = \''.$URL.'\'');
或者,PHP会自动解析它在双引号字符串中找到的任何变量,所以你也可以这样做:
$data = $db->fetch_all_array("select * from recs WHERE urlref = '$URL'");
请注意,如果您考虑使用此方法进行直接用户输入,或者您的内容不是100%肯定的变量,那么最好调查Prepared Statements的使用情况。 SQL转义。
答案 2 :(得分:1)
您使用单引号来封装字符串。这意味着变量不会扩展,您将以文字查询结束:
select * from recs WHERE urlref = ".$URL."
您需要以下内容:
$data=$db->fetch_all_array('select * from recs WHERE urlref = "'.$URL.'"');
// ^ ^ ^ ^
或者这个:
$data=$db->fetch_all_array("select * from recs WHERE urlref = '".$URL."'");
// ^ ^ ^ ^
甚至:
$data=$db->fetch_all_array("select * from recs WHERE urlref = '$URL'");
// ^ ^
请确保在将$URL
变量粘贴到数据库查询之前对其进行转义,否则您需要将代码打开到SQL注入攻击。
答案 3 :(得分:0)
$data=$db->fetch_all_array("select * from recs WHERE urlref = '".$URL."'");
如果您输入了" google.com"它将是" .google.com。"
答案 4 :(得分:0)
如果你使用双引号(" "
),它们内部的php变量将被解析如下:
$data=$db->fetch_all_array("select * from recs WHERE urlref = '{$URL}' ");
答案 5 :(得分:0)
您应该使用准备好的陈述:http://php.net/manual/en/mysqli.prepare.php
答案 6 :(得分:0)
您必须在代码中进行以下更改:
$data=$db->fetch_all_array('select * from recs WHERE urlref = "'.$URL.'"');