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

Php 警告:mysql_fetch_array()希望参数1是资源,布尔值在更新记录时给出,php,mysql,sql-update,Php,Mysql,Sql Update,我正在更新一个mysql表。我得到一个错误如下 警告:mysql_fetch_array()希望参数1是resource,布尔值在第232行的C:\xampp\htdocs\test\edit.php中给出 错误。您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第1行“”附近要使用的正确语法 查询似乎没有产生结果。我通过url将id传递给函数,但变量似乎已死亡,尽管它似乎在作用域中。可能是我的错误。下面是更新的循环。我已经注释掉了一些我认为有问题的行,但是它们很好。粗体代码是

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

警告:mysql_fetch_array()希望参数1是resource,布尔值在第232行的C:\xampp\htdocs\test\edit.php中给出 错误。您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第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
        }
elseif(isset($\u POST['editSelection']))
{ 
//检查表格是否已提交
//收集表单发布的变量。
$fixture\u id=mysql\u real\u escape\u字符串($\u POST['fixture\u id']);
$守门员=mysql_real_escape_string($_POST['守门员]);
$defender=mysql_real_escape_字符串($_POST['defender']);
$fullback=mysql\u real\u escape\u字符串($\u POST['fullback']);
$MIDRID=mysql_real_escape_字符串($_POST['MIDRID']);
$wing=mysql\u real\u escape\u字符串($\u POST['wing']);
$sliker=mysql_real_escape_string($_POST['sliker']);
$sid=mysql\u real\u escape\u string($\u POST['sid']);//接收从editForm中的隐藏字段发布的选择id
$sql=“SELECT*FROM`selections`WHERE selection_id={$sid}”;
$data=mysql\u查询($sql);
**while($rows=mysql\u fetch\u数组($data))
{
$opporters=$rows['opporters'];
}**
//通过检查用户可能已使用strlen()php内置方法提交的空字符串来验证表单。如果没有空字符串,则处理表单
//如果(斯特伦($fixture_id)>0&&strlen($dependener)>0&&strlen($defender)>0&&strlen($后卫)>0&&strlen($medium)>0&&strlen($wing)>0&&strlen($selection_id)>0&&strlen($selection_id)>0){//如果表单字段不为空,更新数据库中的选择记录
$sql=“UPDATE`selections`SET footer='{$gooter}',其中selection_id={$sid}”;
$query=mysql\u query($sql)或die(“执行查询时出错”。mysql\u Error());
回显“选择更新

”; 回声“; //} } 呼应“中场”; $sql=“从“玩家”中选择名称”; $data=mysql\u查询($sql); while($rows=mysql\u fetch\u数组($data)){ 回声“; echo$rows['name']; 回声“; } 回声“; 回声“; 呼应“翅膀”; $sql=“从“玩家”中选择名称”; $data=mysql\u查询($sql); while($rows=mysql\u fetch\u数组($data)){ 回声“; echo$rows['name']; 回声“; } 回声“; 回声“; 呼应“前锋”; $sql=“从“玩家”中选择名称”; $data=mysql\u查询($sql); while($rows=mysql\u fetch\u数组($data)){ 回声“; echo$rows['name']; 回声“; } 回声“; 回声“; 回声“;//创建具有选择id的隐藏字段,以编辑正确的选择 回声“; 回声“; }//while循环结束 }
您是否尝试添加mysql\u error()以查看收到的错误消息? 更改此项:

$data = mysql_query($sql);
为此:

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

您收到的消息是,该查询的结果是真/假,而不是mysql“资源”。MySQL资源是MySQL查询的正常响应,可以使用MySQL\u fetch\u数组或MySQL\u fetch\u assoc等“读取”MySQL资源

因此,如果您得到的是正确/错误的响应,那么特定的查询并没有提供您想要的数据。与我一起解决问题:为什么会发生这种情况


试试这个:

"SELECT * FROM `selections` WHERE `selection_id` = '$sid'";
另外,回显$sid的值,以便您可以看到其中包含一些内容。null返回在mysql\u fetch\u数组中也不起作用


还可以尝试回显整个$\u帖子,以查看收到的内容:

echo '<pre>';
print_r($_POST);
echo '</pre>';
echo';
打印(邮政美元);
回声';
mysql\u query()
如果有效,则返回结果集;如果无效,则返回
false
mysql\u fetch\u array()
抱怨在需要结果集的地方使用布尔值,这意味着查询返回了
false
(即,它没有工作)

您应该使用以下内容:

$sql = "SELECT * FROM selections WHERE selection_id = '{$sid}'";
为了了解实际的错误是什么,我将在生产代码中寻找一些更健壮的东西。不过,这应该足以确定眼前的问题

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

如果它是一个字符串,则需要用单引号将
{$sid}
括起来:

SELECT * FROM selections WHERE selection_id =
如果为空,则需要找出原因,因为这将导致无效查询:



当然,您应该尽可能地使用
mysqli.*
函数,因为
mysql.*
函数已被弃用。

是不是my.\u real.\u escape()在值方面存在一些复杂问题?如果我用va替换$sid
SELECT * FROM selections WHERE selection_id =