【问题标题】:Writing to the database with $sql in a while loop在 while 循环中使用 $sql 写入数据库
【发布时间】:2012-05-14 05:40:34
【问题描述】:

希望你能帮我解决一个 php 数据库问题。

------这里是php文件减去数据库信息-------------

// Connect to server and select database
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select database");

// read data
    $query="SELECT * FROM $tbl_name ORDER BY ID ASC";
    $result=mysql_query($query);

// Start loop
$i=0;
$num=10;
while ($i < $num) {
$ID=mysql_result($result,$i,"ID");
$notes=mysql_result($result,$i,"notes");
$InStitches=mysql_result($result,$i,"InStitches");
$notes=mysql_result($result,$i,"notes");

echo"i=$i, ID=$ID | InStitches=$InStitches | notes=$notes";

if($notes=="In Stitches game"){
    // update data in mysql database 
    echo "<font color=\"#0000FF\"> || $ID yes ||</font>";
    $sql="UPDATE $tbl_name SET InStitches='yes' WHERE ID='$ID'";
    $ID2=mysql_result($result,$i,"ID");
    $InStitches2=mysql_result($result,$i,"InStitches");
    echo " || $ID2 $InStitches2 ||";
}

echo" - done<br/>";

// Increase value of i and continue loop
$i++;
}

----这是我的显示器上显示的故障排除结果---

i=0, ID=1 | InStitches=yes4 | notes=this is a note - done
i=1, ID=2 | InStitches=yes4 | notes= - done
i=2, ID=11 | InStitches= | notes= - done
i=3, ID=12 | InStitches= | notes=tester, In Stitches game - done
i=4, ID=14 | InStitches=22 | notes=In Stitches game || 14 yes || || 14 22 || - done
i=5, ID=15 | InStitches= | notes= - done
i=6, ID=16 | InStitches= | notes= - done
i=7, ID=17 | InStitches= | notes= - done
i=8, ID=18 | InStitches= | notes=blog tour winner, tester - done
i=9, ID=19 | InStitches= | notes=tester - done

对于 i=4 (ID=14)

“InStitches”字段为“22”,将在数据库中更改为“yes”。但它没有改变。保持 22 岁。

我在其他 php 文件中使用 $sql 语句,它工作得很好。此脚本的唯一区别是我在 while 循环中有 $sql 语句。所以我在网上搜索并搜索是否是因为我在while循环中有$sql语句。我在任何地方都找不到问题所在。我已经在这个脚本上工作了超过 8 个小时,而且我已经束手无策了。

知道为什么它没有写入数据库吗?

【问题讨论】:

  • 如果您进入一个循环对数据库执行操作,请仔细检查您是否真的需要该循环。它可能只是一个集合操作。在这种情况下,似乎您应该能够直接进行更新,而不是查询,然后更新: UPDATE SET InStitches='yes' WHERE $notes = 'In Stitches game'。根据 rdbms,使用 RETURNING 子句返回您感兴趣的更新列的字段,或者进行第二次查询以获取结果。一次更新胜过多次循环。
  • 请停止使用古老的mysql_* 函数编写新代码。它们不再维护,社区已经开始 deprecation process 。相反,您应该了解prepared statements 并使用PDOMySQLi。如果您无法决定,this article 将帮助您选择。如果你想学习,here is a good PDO-related tutorial.

标签: php sql while-loop


【解决方案1】:

你没有执行更新语句!

$sql="UPDATE $tbl_name SET InStitches='yes' WHERE ID='$ID'";
$ID2=mysql_result($result,$i,"ID");

应该是

$sql="UPDATE $tbl_name SET InStitches='yes' WHERE ID='$ID'";
$result=mysql_query($sql);

【讨论】:

  • 谢谢!哇,不到五分钟就有答案了。它现在完美无缺。我不能说我多么感谢你的帮助!
猜你喜欢
  • 2015-12-22
  • 2023-03-29
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
相关资源
最近更新 更多