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