Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Regexp和变量_Php_Mysql_Regex - Fatal编程技术网

Php Regexp和变量

Php Regexp和变量,php,mysql,regex,Php,Mysql,Regex,我有这个表单,它输出一些字母和字长。但是我在从数据库中获取正确的输出时遇到了一些问题 if ($_SERVER['REQUEST_METHOD'] == 'POST') { $letters = mysql_real_escape_string($_POST['letters']); $length = mysql_real_escape_string($_POST['length']); echo "Letters: $letters";

我有这个表单,它输出一些字母和字长。但是我在从数据库中获取正确的输出时遇到了一些问题

   if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $letters = mysql_real_escape_string($_POST['letters']);
        $length = mysql_real_escape_string($_POST['length']);
        echo "Letters: $letters";
        echo "Lengte: $length";
        $res=mysql_query("SELECT word FROM words WHERE word REGEXP '[$letters]{$length}' ")
         or die ('Error: '.mysql_error ());
        while ($row=mysql_fetch_array($res)){
            echo $row['word'];
            echo "<br />";
        }
     }
     else {
         echo "Foutje";
     }
if($\u服务器['REQUEST\u METHOD']=='POST'){
$letters=mysql_real_escape_字符串($_POST['letters']);
$length=mysql\u real\u escape\u字符串($\u POST['length']);
回音“字母:$字母”;
回声“长度:$length”;
$res=mysql_查询(“从单词REGEXP'[$letters]{$length}'所在的单词中选择单词)
或者死('Error:'.mysql_Error());
while($row=mysql\u fetch\u数组($res)){
echo$row['word'];
回声“
”; } } 否则{ 回声“Foutje”; }
如果我将$length更改为表单输入的整数,我的脚本将正常工作。复制/粘贴[$letters]6次同样有效。我想引用是有问题的,但我完全搞不清楚它到底是什么

有人能看出我做错了什么吗?
谢谢。

PHP将
{}
解释为内部变量的分隔符,因为您使用的是双引号字符串。通过连接更改报价:

$res=mysql_query("SELECT word FROM words WHERE word REGEXP '[" . $letters . "]{" . $length ."}'")
或者在双引号字符串中加倍
{}
,以便将外部对解释为文本

$res=mysql_query("SELECT word FROM words WHERE word REGEXP '[$letters]{{$length}}' ")
注意,您还应该验证
$length
是否包含正整数

if (!ctype_digit($length)) {
  // error - length must be an int
}
尝试这样做:

res=mysql_query("SELECT word FROM words WHERE word REGEXP '[".$letters."]{".$length."}' ")

我有一种预感,$作为regex的一部分被加密

以确保输入不会破坏regexp模式。最后一个做了。谢谢,我完全忘了那个选项!