Php 当循环不用于访问sql记录时

Php 当循环不用于访问sql记录时,php,Php,我将向这个文件传递一个字符串-txtname-(用空格分隔的字符串)并对每个单词进行saparate,然后将其传递给函数subtoken(),该函数应该从数据库中获取相应的单词,该函数有两个属性rootwords和example,但是subtoken()函数只执行一次并退出 $counter=0; $string = $_REQUEST['txtname']; $token = strtok($string, ' '); while ($token != false) {echo $coun

我将向这个文件传递一个字符串-txtname-(用空格分隔的字符串)并对每个单词进行saparate,然后将其传递给函数
subtoken()
,该函数应该从数据库中获取相应的单词,该函数有两个属性rootwords和example,但是
subtoken()
函数只执行一次并退出

$counter=0; 

$string = $_REQUEST['txtname'];
$token = strtok($string, ' ');
while ($token != false)
{echo $counter;
  subtoken($token,$counter);

 $counter++;
 $token = strtok(' ');  

}


function subtoken($fname,$counter)
{
$row ="";
$result="";
$result = mysql_query('SELECT * FROM hindi WHERE rootwords LIKE  \'%:'.$fname.':%\'' );

while($row = mysql_fetch_array($result))
{
$temp=$row['rootwords'];
$token2 = strtok($temp, ':');
echo $token2 ;
while($token2!=false)
{

    echo $token2."<br/>" ;
    $token2=strtok(':');
}

}

}

mysql_close($con);
$counter=0;
$string=$\请求['txtname'];
$token=strtok($string',);
while($token!=false)
{echo$计数器;
小计($token,$counter);
$counter++;
$token=strtok(“”);
}
函数subtoken($fname,$counter)
{
$row=“”;
$result=“”;
$result=mysql\u query('SELECT*FROM印地语,其中根词像\'%:'.$fname.':%\'');
while($row=mysql\u fetch\u数组($result))
{
$temp=$row['rootwords'];
$token2=strtok($temp,,:');
echo$2;
而($token2!=false)
{
echo$token2.“
”; $token2=strtok(“:”); } } } mysql_close($con);
双重使用strtok将阻止“main”循环正确处理原始
$string
中的所有令牌。您不能同时使用多个“open”
strtok

最初的怀疑是你的查询,它只是没有选择任何东西。尝试打印SQL语句,然后直接执行该语句(例如,通过phpmyadmin)

根据我的经验,调试时尽早回显尽可能多的数据是容易发现错误的最佳工具之一。

另请参见: mysql_fetch_数组需要第二个参数才能正常工作


用mysql\u fetch\u行替换mysql\u fetch\u数组。或mysql_fetch_assoc,如果您希望按名称引用列

您可能有一些错误/警告?错误报告是否设置为E_ALL并将错误显示为“On”?

strtok()似乎只有一个指针。因此,当您在函数中以它结束时,您需要重新初始化
$token=strtok($string')?我不确定。我认为如果你使用函数会更好。

不是这样
mysql\u fetch\u array
,就像
mysql\u fetch\u row
一样,一次从数据库中传递一行数据;只是采用了不同的格式:一个按字符串索引(_数组)传递它们,而另一个按列号索引(_行)。即使在编辑之后,仍然不是真的。mysql_fetch_数组中的第二个参数是optional2nded。phpmyadmin的输出应该能够告诉您首先要处理的数据集类型。否。。这个查询运行得很好。。但只有第一次登出来。。我想因为第二圈。。当$token2变为false时。。我给你举个例子。。过来看。。这里是$fname=“ram”,然后我得到$row=$result$row[rootwords]=:ram:sham:jam:naam:然后使用第二个循环将其拆分为ram、sham、jam、nam。。这应该只发生一次。$token2将值打印为ram、sham、nam和jam。。然后退出..那么实际上标记器没有正确标记?你应该把它放在问题里,它会帮助你认识到问题的所在。。。但现在我真的不明白确切的问题是什么,你能重新表述它吗?也许不是在评论中,而是通过编辑原始问题!啊,我想我现在明白了。这是在两个地点对斯特克的呼叫;一次在“主循环”中,一次在次循环中。每次使用string参数调用strtok都会重新开始标记化,不管它是否在方法内部(它会在内部某处保持状态)。你需要重写一下。
// insert this line:
echo(
    'SELECT * FROM hindi '.
        'WHERE rootwords LIKE  \'%:'.$fname.':%\'');
// just before the actual query execution
$result = mysql_query(
    'SELECT * FROM hindi '.
        'WHERE rootwords LIKE  \'%:'.$fname.':%\'' );