【问题标题】:mysql_query in a while loopmysql_query 在 while 循环中
【发布时间】:2010-10-25 20:24:27
【问题描述】:

我正在尝试执行 我在此类页面中有一个 html 表单:

Name: <input type="text" id="namebox" value="" name="fields[]" /> <br />
Position: <input type="text" id="positionbox" value="" name="fields[]" /> <br />

<input type="hidden" name="createcard">     
<input type="submit" value="Create">

.. 和其他 3 个字段。我通过 POST 将这 5 个表单字段传递到文件 process.php,该文件具有以下功能,可将数组元素插入 mysql DB。

if(isset($_POST['createcard'])){
    $this->procCreateCardtheme1();
..
..

    function procCreateCardtheme1(){
    global $session;

            $cardData = $_POST['fields'];
            $username=$session->username;
            $sno=1;
            echo count($cardData);
            while($sno < count($cardData))
            {
             $v=$cardData[$sno];
             echo $v;
             mysql_query("INSERT INTO carddata VALUES ('$username', $sno, '$v', 1)");
             $sno++;
            }

现在,上面的 echo 语句返回了预期的输出,即五个左右的字段。但是 mysql_query 只执行一次。它只是将第一个条目存储在数据库中,没有别的。即使重新提交表格也无济于事。它只是存储在数据库中的一个条目。 有什么想法吗?

【问题讨论】:

  • 循环执行查询不是一个好主意。在循环中形成查询并在外部执行。
  • 更改为mysql_query("INSERT INTO carddata VALUES ('$username', $sno, '$v', 1)") or die(mysql_error()) 并告诉我们输出是什么。另外,为了安全起见,请务必转义用户输入数据!
  • 感谢您的提示。会这样做..
  • 是的。我将 mysql_real_escape_string() 添加到用户数据中。 :) 谢谢 ;)
  • 另外,您对 $username 进行验证,即使它来自 $session,您也永远不知道其他页面何时出现问题并在会话中存储了错误的用户名。

标签: php database mysql loops


【解决方案1】:

carddata 表中的username 是否有唯一约束?这将导致第二次插入失败。

要调试这个,你应该在你的程序中添加一些错误检查:

mysql_query("INSERT INTO carddata VALUES ('$username', $sno, '$v', 1)")
    or trigger_error(mysql_error());

如果字符串数据可以包含引号,您可能还需要使用 mysql_real_escape_string 来避免语法错误或可能的 SQL 注入漏洞。

【讨论】:

  • 我希望它是相同的用户名。我只需要改变数组值。即 $cardData[0]、$cardData[1] 等等..
  • @Hardik Ruparel:你能在你的问题中发布SHOW CREATE TABLE carddata 的输出吗?
  • @Hardik Ruparel:你用1初始化$sno。我认为您应该使用0 对其进行初始化。
  • @Felix。是的。我也注意到了。谢谢:)
【解决方案2】:

当查询变量 ($query) 出现问题时,会出现单循环迭代问题 和结果对象 ($result)。

在 WHILE 循环内尝试不同的变量名称或调试循环内的变量。

【讨论】:

    猜你喜欢
    • 2013-06-19
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2011-08-09
    相关资源
    最近更新 更多