警告:mysql_fetch_array()期望参数1是资源,布尔值在更新记录时给定


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given when updating record

我正在更新一个mysql表。我得到如下错误

警告:mysql_fetch_array()期望参数1是资源,布尔值在C:'xampp'htdocs'test'edit.php中第232行给出错误。你有一个错误在你的SQL语法;查看与MySQL服务器版本对应的手册,了解在"at line 1

"附近使用的正确语法。

查询似乎没有产生结果。我通过一个url传递一个id到一个函数,但变量似乎死了,虽然它似乎在范围内。可能是我的错误。下面是更新的循环。我已经注释掉了一些行,我认为这是一个问题,但他们是好的。黑体代码是问题行。

elseif(isset($_POST['editSelection']))
{ 
    // check if form is submitted
    //collect variables posted by form.
    $fixture_id = mysql_real_escape_string($_POST['fixture_id']);
    $goalkeeper = mysql_real_escape_string($_POST['goalkeeper']);
    $defender = mysql_real_escape_string($_POST['defender']);
    $fullback = mysql_real_escape_string($_POST['fullback']);
    $midfielder = mysql_real_escape_string($_POST['midfielder']);
    $wing = mysql_real_escape_string($_POST['wing']);
    $striker = mysql_real_escape_string($_POST['striker']);
    $sid = mysql_real_escape_string($_POST['sid']); // receive the selection_id which was posted from the hidden field in the editForm
    $sql = "SELECT * FROM `selections` WHERE selection_id = {$sid}";
    $data = mysql_query($sql);
   **while($rows = mysql_fetch_array($data))
     {
        $opponents = $rows['opponents'];
     }**
    //validate form by checking for empty strings that user might have submitted using strlen() php built-in method. If no empty string form processes
            //if(strlen($fixture_id)>0 && strlen($goalkeeper)>0 && strlen($defender)>0 && strlen($fullback)>0 && strlen($midfielder)>0 && strlen($wing)>0  && strlen($striker)>0 && strlen($selection_id)>0) {  // if form fields are not empty, update Selection record in database
    $sql = "UPDATE `selections` SET goalkeeper ='{$goalkeeper}' WHERE selection_id = {$sid}";                               
    $query = mysql_query($sql) or die("Error executing query ".mysql_error());
                            echo "Selection updated <br/><br/>";    
                            echo "<a href='"team_selections.php'">Go back to Team Selections page </a>";    
        //}
    }

echo"<tr><td>Midfielder</td><td><select name='"midfielder'">";
                    $sql = "SELECT name FROM `player` ";
                    $data = mysql_query($sql);
                            while($rows = mysql_fetch_array($data)){
                                echo "<option value={$rows['name']}>";
                                echo $rows['name'];
                                echo "</option>";
                            }
                    echo "</select>";
                    echo "</td></tr>";

                    echo"<tr><td>Wing</td><td><select name='"wing'">";
                    $sql = "SELECT name FROM `player` ";
                    $data = mysql_query($sql);
                            while($rows = mysql_fetch_array($data)){
                                echo "<option value={$rows['name']}>";
                                echo $rows['name'];
                                echo "</option>";
                            }
                    echo "</select>";
                    echo "</td></tr>";
                    echo"<tr><td>Striker</td><td><select name='"striker'">";
                    $sql = "SELECT name FROM `player` ";
                    $data = mysql_query($sql);
                            while($rows = mysql_fetch_array($data)){
                                echo "<option value={$rows['name']}>";
                                echo $rows['name'];
                                echo "</option>";
                            }
                    echo "</select>";
                    echo "</td></tr>";

                    echo "<tr><td></td><td><input type='"hidden'" value='"{$rows['selection_id']}'" name='"sid'"></td></tr>"; // create hidden field with selection_id which enables the right selection to be edited
                    echo "<tr><td></td><td><input type='"submit'" value='"Update Selection'" name='"editSelection'"></td></tr>";
                    echo "</table></form>";
            } //end of while loop
        }

mysql_query()如果工作则返回结果集,如果不工作则返回false。事实上,你得到投诉从mysql_fetch_array()使用布尔值,其中一个结果集是必需的,这意味着查询已经返回false(即,它没有工作)。

你应该这样写:

$data = mysql_query($sql)  or die (mysql_error());

来查看实际的错误是什么,尽管我希望在生产代码中看到一些更健壮的东西。不过,这应该足以确定当前的问题。

您可能还希望在尝试执行查询之前实际输出查询,例如,$sid有问题,例如它是空的,或者它是一个字符串,而您的查询似乎需要一个数值。

如果字符串,您需要用单引号将{$sid}括起来:

$sql = "SELECT * FROM selections WHERE selection_id = '{$sid}'";

如果为空,则需要跟踪原因,因为这会给您无效的查询:

SELECT * FROM selections WHERE selection_id =

当然,您应该尽可能使用mysqli_*函数,因为mysql_*函数已被弃用。

您是否尝试添加mysql_error()来查看您正在获得的错误消息?改变这个:

$data = mysql_query($sql);

:

$data = mysql_query($sql) or die(mysql_error());

你收到的消息是说查询的结果是真/假,而不是mysql的"资源"。MySQL资源是MySQL查询的正常响应,它们可以通过mysql_fetch_array或mysql_fetch_assoc等来"读取"。

所以如果你得到一个真/假的响应,那么这个特定的查询并没有给你你想要的数据。和我一起排除故障:为什么会发生这种情况?


试试这个:

"SELECT * FROM `selections` WHERE `selection_id` = '$sid'";

同样,回显$sid的值,这样您就可以看到它里面有一些东西。在mysql_fetch_array中也不能使用null返回值。


也试着回显整个$_POST,看看到底收到了什么:

echo '<pre>';
print_r($_POST);
echo '</pre>';
相关文章: