【问题标题】:mysql_data_seek error in ff and chrome, but works in ieff和chrome中的mysql_data_seek错误,但在ie中有效
【发布时间】:2012-02-14 08:23:51
【问题描述】:

所以我在我的script.js 文件和前一页的表单中使用 AJAX 发布$_POST['location']。我的问题是这在 IE 中有效,但在 ff 和 chrome 中给我以下错误:

Warning: my_data_seek() [function.mysql-data-seek]:
Offset 0 is invalid for MySQL result index 2 (or the query data is unbuffered)
in ...reserveAPickupAppointmentDateResults.php on line 39 

我知道数据在数据库中,但在过去,我通常只会在 SQL 没有返回任何条目时收到该错误。我认为这是 SQL 的问题?

reserveAPickupAppointmentDateResults.php

<?php
session_start();

//create database connection
$connection = mysql_connect("XXXX","XXXX","XXXX"); 

//in case database connection fails
if(!$connection)
{
    die("Database connection failed: ".mysql_error());
}   
else
{
    //select database to use
    $db_select = mysql_select_db("XXXX",$connection);

    //in case database selection fails
    if (!$db_select)
    {
        die("Database selection failed: " . mysql_error()); 
    } 
    else
    {
        $appointmentLocation = mysql_real_escape_string($_POST['location']);
        $_SESSION["location"] = $appointmentLocation;

        $sql =  "SELECT timeBlocks.location, timeBlocks.date
        FROM timeBlocks
        WHERE timeBlocks.location = '".$appointmentLocation."';";

        //set results to variables
        $result = mysql_query($sql);
        if (!$result)
        {
            die("Database query failed: " . mysql_error()); 
        }

        $row = mysql_fetch_array($result);
        ?>

        <form class="reserveAPickupAppointmentForm5" id="reserveAPickupAppointmentForm5">
        <table>

        <?php
        mysql_data_seek($result, 0);

        while($row = mysql_fetch_array($result))
        {
            ?>
            <tbody class="reserveAPickupAppointmentDateResults">
                <tr>
                    <td>
                        <span class="reserveAPickupAppointmentDateText">
                            <img src="images/reserveAPickupAppointmentButton1.png" class="reserveAPickupAppointmentDate">
                            <?php echo $row["date"]; ?>
                        </span>
                    </td>
                </tr>
                <tr>
                    <td>We have the following dates available for your location.  If you would like a different date, please choose "request a custom date" to try to schedule a custom appointment.  Otherwise, please choose a different date.</td>
                </tr>
            </tbody>
            <?php
        }
        ?>

        </table>
        </form>

        <?php
    }
}

// Close connection 
mysql_close($connection);
?>

来自formScript.js的相关脚本

$(".reserveAPickupAppointmentDateText").click (function() {
    appointmentLocation = $(this).text();
    $.post(
        'reserveAPickupAppointmentTimeResults.php',
        {
            'date': date,
            'location': appointmentLocation,
            'appointmentSize': appointmentSize
        },

        function (response)
        {
            $("#reserveAPickupAppointmentTimeResults").html(response);
        }
    );

    return false;
});

【问题讨论】:

  • 如果它在一个浏览器中工作但在另一个浏览器中不能工作,这是客户端问题而不是服务器端问题。你可以发布javascript吗?
  • 你为什么还要使用mysql_data_seek()?在那之前$row = mysql_fetch_array($result); 有什么意义?
  • 当然,请给我一点时间来粘贴它,另外,我删除了相同的类和 id...这是来自旧版本,抱歉造成混乱
  • 另外,HTML 无效。最后一个&lt;tr&gt;&lt;td&gt;没有关闭
  • @mchl 谢谢你,它已修复,但仍然出错。

标签: php jquery mysql ajax post


【解决方案1】:

这没有理由是特定于浏览器的,我怀疑实际发生的情况是 IE 不会呈现错误消息,而 chrome 和 FF 会。如果您查看源代码,您可能会在 IE 下看到错误消息 - 如果生成的源代码因浏览器不同而不同,那么就会发生一些非常奇怪的事情。

更重要的一点是,您对mysql_data_seek() 的调用毫无意义,也没有任何用处。

你打电话:

$row = mysql_fetch_array($result);

但是你从来没有对$row做任何事情,然后你打电话:

mysql_data_seek($result, 0);

在进入循环之前。如果您删除这两行,它不会影响最终结果,但应该会消除错误。

编辑

如果您确实在不同的浏览器中生成了不同的内容,那么问题很可能是appointmentLocation 在 FF 和 Chrome 的 Javascript 中没有正确填充,因此 SQL 查询没有返回任何结果。在这种情况下,您应该检查为 appointmentLocation 赋值的 Javascript。

【讨论】:

  • 但我在表中使用了 $row['date']
  • 你在循环中使用了$row,但你没有在我上面提到的两行之间使用它。 RE IE 问题中没有错误,请参阅上面的编辑。
  • 感谢您的编辑回复...我刚刚确认 $appointmentLocation 通过在同一个文件中成功回显它已正确传递给 ff 和 chrome。我也相信 sql 查询搞砸了,但我不知道为什么
  • 它来自您的 Javascript 中的某个地方。请编辑问题并显示您为appointmentLocation赋值的代码
  • 没问题 :-) NB 来自jQuery docs on .text(): Due to variations in the HTML parsers in different browsers, the text returned may vary in newlines and other white space.
【解决方案2】:

如果删除之前的 $row = mysql_fetch_array($result); 行,则不需要 mysql_data_seek($result, 0);。而且您可以删除该行,因为无论如何您都没有使用 $row 变量。

Offset 0 is invalid for MySQL result index 错误消息表明您的查询返回了 0 行。尝试找出原因。

【讨论】:

  • 但我在表中使用 $row['date']
  • 是的,但是你正在做while($row = mysql_fetch_array($result)),它会为它分配数据。
  • 它确实做到了,确实摆脱了错误,但我仍然没有得到 chrome 或 ff 的结果......我仍然怀疑 sql 有问题
【解决方案3】:

据我所知,您没有在 click 函数中的任何位置定义您的 POST 变量。

您可能需要类似的东西(取决于您的表单/html):

$(".reserveAPickupAppointmentDateText").click (function() {

  var appointmentLocation = $("#appointmentlocation").val();
  // and all other variables

  $.post(
    // etc.

【讨论】:

  • 对不起,它们定义得更早了,但是有很多与这些部分相关的代码,我只是想为帖子瘦身
  • 我刚刚用chrome和ff在reserveAPickupAppointmentDateResults.php中成功回显了$appointmentLocation
  • 我刚刚在reserveAPickupAppointmentDateResults.php 中成功回显了$appointmentLocation 在chrome 和ff 中(对不起,我推送了编辑而不是意外添加推荐)
  • @radleybobins 如果 IE 给出的结果与 Firefox 或 Chrome 不同,IE 发送的内容与其他两个不同,您的 php 文件不关心您使用的是哪个浏览器,只关心发布的信息给它。
猜你喜欢
  • 2012-10-13
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
相关资源
最近更新 更多