PHP Do While循环中的SQL Update命令

PHP Do While循环中的SQL Update命令,php,sql,do-while,Php,Sql,Do While,我有一个名为projects的SQL数据库,其中包含post_id、feature_image、order和landscape字段。景观对于所有密集型目的而言都是一个类别 作为我试图了解的功能的概述 页面加载 1记录集将所有分类的post_id 1、2、4、5、8、12…等重新编号,特别是1、2、3、4、5。。。等 然后,为每个post_id重新编号将向SQL发送一个名为order的字段中的更新,该字段将接受这些值。 然后两个记录集一个奇数,一个偶数加载的不是post_id,而是顺序和所有相关信

我有一个名为projects的SQL数据库,其中包含post_id、feature_image、order和landscape字段。景观对于所有密集型目的而言都是一个类别

作为我试图了解的功能的概述

页面加载 1记录集将所有分类的post_id 1、2、4、5、8、12…等重新编号,特别是1、2、3、4、5。。。等 然后,为每个post_id重新编号将向SQL发送一个名为order的字段中的更新,该字段将接受这些值。 然后两个记录集一个奇数,一个偶数加载的不是post_id,而是顺序和所有相关信息。在本例中,是一个特征图像,并在屏幕上输出两列图片,根据加载的类别,这些图片的顺序是正确的

我知道我可以用邮政id订购,这不是问题所在。我特别想要的能力,使所有的数字重新排序的数字正是1,2,3,4,5,6等页面加载

我只发布了if语句的第一部分,因为我知道这不是它的第一部分。所有的工作都与变量等有关,唯一的问题是我无法按照字段顺序将该死的变量发送到数据库。我在这方面工作了太久,不知道我在这一点上做错了什么。没有错误,只是order字段在数据库中保持为空

我将为任何能够修复此代码或告诉我为什么我要做每件事的人举办一次tickertape游行,并且有更好的方法来做到这一点

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
  $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  break;    
case "long":
case "int":
  $theValue = ($theValue != "") ? intval($theValue) : "NULL";
  break;
case "double":
  $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
  break;
case "date":
  $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  break;
case "defined":
  $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
  break;
}
return $theValue;
}
}

mysql_select_db($database_connTest, $connTest) or die("cannot select database");
$query_RS_Odd = "SELECT projects.post_id, projects.feature_image, projects.`order` FROM projects WHERE projects.landscape = 'landscape'";
$RS_Odd = mysql_query($query_RS_Odd, $connTest) or die(mysql_error());
$row_RS_Odd = mysql_fetch_assoc($RS_Odd);
$totalRows_RS_Odd = mysql_num_rows($RS_Odd);
?>

<?php do {
if ($row_RS_Odd['post_id'] == 1){ 
    $resort_next = 1;
    mysql_query("UPDATE projects SET order=".$resort_next." WHERE post_id=".$row_RS_Odd['post_id']."");
    echo $row_RS_Odd['post_id'];
    echo $resort_next;
}
else {
echo 'No records found';
}
 } while ($row_RS_Odd = mysql_fetch_assoc($RS_Odd)); ?>

虽然在select语句中正确引用了mysql保留顺序字,但在update语句中忘记了这样做:

mysql_query("UPDATE projects SET order=".$resort_next." WHERE post_id=".$row_RS_Odd['post_id']."");
应该是:

mysql_query("UPDATE projects SET `order`=".$resort_next." WHERE post_id=".$row_RS_Odd['post_id']."");

请注意,mysql_*函数已被弃用,您真的应该切换到PDO/mysqli和prepared语句。

它会不断更新post_id 1,这是预期的吗?是的,在这个简单的情况下,如果没有包含在本文中的语句,它应该像在其他语句中一样,我让它继续用于其他语句。我保持简单,只是为了看看它是否会更新SQL表。不幸的是,post_id 1的字段顺序仍然为NULL或0,正如下面所述,我发现SQL查询确实有错误,您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行修改“=1,其中post_id=1”附近使用的正确语法,但我不确定为什么有人告诉我应该切换;那么,我是否要切换到mysqli_查询?此外,我也尝试将其改为“订单”,但不幸的是,这并没有解决问题。仍然没有将变量发送到该字段。在循环中有什么东西不允许它吗?@Tysons Engineer我建议使用准备好的语句和PDO,但这不仅仅是更改函数名。您当前的sql查询只不过是更新项目集合顺序=1,其中post_id=1。你确定那不会发生吗?是的,绝对不会。我简化了它,以查看问题在一个单独的版本中的位置。我有额外的else,如果它将继续到2、3、4等,我通过在表中的每一行回显$resort_next旁边的post_id来验证变量是否在变化。这会在屏幕上正确显示为1和1。但是,当我转到我的数据库时,对于post_id 1,order field Resists=0,我觉得我正在服用疯狂的药丸,关于它为什么不会更新我的字段,我尝试了各种不同的SQL方法来处理变量等。作为参考,我将order field作为长度为100的整数,默认设置为NULL。变化包括我尝试将其作为字符串,尝试将其作为变量。我还将其在某一点上未设置为默认值NULL。显然,我很高兴confused@Tysons工程师您应该从添加正确的错误处理开始。查询失败后,检查mysql\u error的值。