利用mysqli查询结果的PHP重定向语法
我有一个包含六条记录的数据库表,它们是六个不同服务器的URL。有一个程序可以实时填充每个服务器是否可用。我编写了一个查询,返回第一个可用服务器的url。我已经测试了脚本并确定选择过程有效。现在我想使用“header”函数重定向到可用的服务器,我很难确定正确的语法。URL的格式是“muscle.mysite.com:3535nameScan”。这是我目前拥有的利用mysqli查询结果的PHP重定向语法,php,mysqli,Php,Mysqli,我有一个包含六条记录的数据库表,它们是六个不同服务器的URL。有一个程序可以实时填充每个服务器是否可用。我编写了一个查询,返回第一个可用服务器的url。我已经测试了脚本并确定选择过程有效。现在我想使用“header”函数重定向到可用的服务器,我很难确定正确的语法。URL的格式是“muscle.mysite.com:3535nameScan”。这是我目前拥有的 $q = "SELECT url FROM ShinyServers WHERE Availability = '1' LIMIT 0,
$q = "SELECT url FROM ShinyServers WHERE Availability = '1' LIMIT 0, 1 ";
$r = mysqli_query($dbc, $q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
//printf ("%s\n", $row["url"]);
$url= printf ("%s\n", $row["url"]);
header ("Location: $url"); //redirect to muscle*
mysqli_close($dbc);
exit(); //before or after mysqli_close? I think after.
当我执行时,我在地址栏中看到mysite.com/40,我得到一个404
我试过这个:
header ("Location: $row"); //redirect to muscle*
当我执行时,我在地址栏中看到了“mysite.com/array”,我看到了404页面。我尝试了许多变体,我完全弄糊涂了
我希望你们能看到我在努力做什么。我已经支持了什么是有效的
$q = "SELECT url FROM ShinyServers WHERE Availability = '1' LIMIT 0, 1 ";
$r = mysqli_query($dbc, $q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
printf ("%s\n", $row["url"]);
mysqli_close($dbc);
我得到了第一个可用的url,我可以看到结果打印为muscle.mysite.com:3535nameScan
。现在,我需要将结果捕获为一个变量,我可以在更新查询和标题函数中使用。我一直在搜索答案,但还没有找到答案。我认为另一个fetch命令将是回答:但是我找不到一个适合我想做的事情
我相信我使用“sprintf”的建议朝着正确的方向前进。然而,我仍然无法“更新”表格。这就是我现在的位置
error_reporting(E_ALL);
$q = "SELECT url FROM ShinyServers WHERE Availability = '1' LIMIT 0, 1 "; //make query
$r = mysqli_query($dbc, $q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
//printf ("%s\n", $row["url"]);
$url= sprintf ("%s\n", $row["url"]); //assign results to a variable?
echo "$url";
$qu = "UPDATE ShinyServers SET Availability = 0 WHERE url = $url LIMIT 1";
$ru = mysqli_query($dbc, $qu);
if (mysqli_affected_rows ($dbc) ==1){
echo '<p> The status has been updated</p>';
}else{
echo '<p class="error"> The status could not be updated</p>';
}
错误报告(E_ALL);
$q=“从ShinyServer中选择url,其中可用性='1'限制0,1”;//进行查询
$r=mysqli_查询($dbc,$q);
$row=mysqli\u fetch\u数组($r,mysqli\u ASSOC);
//printf(“%s\n”,$row[“url”]);
$url=sprintf(“%s\n”,“$row[“url”]);//是否将结果分配给变量?
回显“$url”;
$qu=“UPDATE ShinyServers SET Availability=0,其中url=$url LIMIT 1”;
$ru=mysqli_查询($dbc,$qu);
if(mysqli_受影响的_行($dbc)==1){
回显“状态已更新”;
}否则{
echo'状态无法更新;
}
我从“echo”$url”;“中获得了预期的结果,但收到了错误消息“状态无法更新”。“我在这方面做了这么久,恐怕我忽略了什么。代码是否有问题,或者DB表是否有问题?我查看了由其他人创建的DB表,发现它没有唯一的列
在prodigitalson和Dan08的帮助下,我有了一个有效的脚本。详情如下:
错误报告(E_全部)
$q=“从ShinyServer中选择url,其中可用性='1'限制为0,1”//询问
$r=mysqli_查询($dbc,$q);
$row=mysqli\u fetch\u数组($r,mysqli\u ASSOC)
//printf(“%s\n”,$row[“url”])
$url=sprintf(“%s”,$row[“url”])//将结果分配给变量
//回显“$url”
$qu=“UPDATE ShinyServers SET Availability=0,其中url='$url'限制1”
$ru=mysqli_查询($dbc,$qu)
if(mysqli_受影响的_行($dbc)==1){
回显“状态已更新”
}否则{
echo“状态无法更新”
}
mysqli_close($dbc)
标题(“位置:http://$url”)
退出()
我的DB表被更新,我被重定向(我知道我不需要条件语句)。我还了解到,“header”函数必须在mysqli_关闭之后。我在php手册中发现了这一点。再调整一下,我的任务就是将这个脚本合并到注册脚本和登录脚本中。哇…再次感谢。这是我的最后一个脚本,它工作得非常完美
<?php
//selecting available server and update status
include_once '../DB/test1DB.php'; //connect to DB
error_reporting(E_ALL);
$q = "SELECT url FROM ShinyServers WHERE Availability = '0' LIMIT 0, 1 "; //make query
$r = mysqli_query($dbc, $q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
$url = sprintf("%s", $row["url"]); //assign results to a variable
$qu = "UPDATE ShinyServers SET Availability = 1 WHERE url = '$url' LIMIT 1";
mysqli_close($dbc);
header("Location: http://$url");
exit();
停止使用@
来抑制错误您的问题之一是将输出发送到浏览器(这将导致标题
失败),并返回输出字符串的长度,因此$url
不包含您认为它的功能。这是一个很好的反馈。我不确定它是否会起作用,但我现在正在尝试不同的事情。我从标题开始(“位置:$row”)//重定向到muscle*是的,您需要返回格式化字符串的sprintf
,而不是像print
/echo
那样输出字符串的printf
。。。您也不必担心在这里关闭mysqli
,因为它应该在PHP关闭时关闭;然后在我的查询中使用变量$url,如下所示:mysqli_query($dbc,“updateshinyservers SET Availability=0,其中url=”。mysqli_real_escape_string($url)。“'LIMIT 1”);它不起作用。我得到了“printf”,但表格没有更新。