Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止mysql\u结果($sql\u结果,0)引发错误_Php_Mysql - Fatal编程技术网

Php 防止mysql\u结果($sql\u结果,0)引发错误

Php 防止mysql\u结果($sql\u结果,0)引发错误,php,mysql,Php,Mysql,如果$sql\U结果没有结果,它将抛出一个错误。。。 如果没有行,正确的方法是什么来防止出错。。你以前一定要数数行吧 mysql_result($sql_result, 0); 向所有回复者致以亲切问候。。J您必须首先测试$sql\u结果。这是我喜欢的方法: if (is_resource($sql_result)) { $value = mysql_result($sql_result, 0); } if ($sql_result !== false # q

如果$sql\U结果没有结果,它将抛出一个错误。。。 如果没有行,正确的方法是什么来防止出错。。你以前一定要数数行吧

mysql_result($sql_result, 0);

向所有回复者致以亲切问候。。J

您必须首先测试
$sql\u结果。

这是我喜欢的方法:

if (is_resource($sql_result)) {
    $value = mysql_result($sql_result, 0);
}
if ($sql_result !== false             # query was successful
 && mysql_num_rows($sql_result) > 0)  # query returned rows
{
    // do your thing
}
$sql = "SELECT * ....";
$r = mysql_query($sql);
if (!$r) throw new Exception('Error: ' . mysql_error() . '; Attempted: ' . $sql);
if (mysql_num_rows($r) > 0) {
   //Process Result
} else {
   //Deal with an empty Result Set
}
如果mysql查询失败,我会抛出一个异常,因为至少在我的应用程序中,失败的sql查询会破坏交易:继续正常的脚本执行不会完成任何有用的事情~[sql语法出错或数据库连接问题]。异常会冒泡,直到应用程序找到合适的地方来捕获此类问题

我使用了一个特定于应用程序的异常:
ExceptionMySQL
,这样我就可以智能地在应用程序中更高级地捕捉它:例如

//Top Level Application
try {
   //Execute appropriate application call
} catch (ExceptionMySQL $e) {
   //Deal with a mysql exception
} catch (ExceptionPermission $e) {
  //Deal with a permission Exception
} catch (//etc. etc. etc.

停止抛出错误的最简单方法是停止使用它。它很古老,几乎不再被维护。这是个不错的主意,尽管您肯定希望选择比抛出异常更具体的类型:)如果您还没有使用异常,请注意,如果查询失败,这将导致脚本死亡。在这种情况下,这通常是正确的做法,但仍然需要注意。@cHao是的,我本来打算使用我实际使用的异常,但我担心它会使我的答案不那么清晰=)这种方法似乎为单个查询添加了比必要和干净的更多的工作和逻辑。如果查询不正确,PHP将抛出错误…但如果没有行,则不会抛出错误。如果查询是好的,结果集是空的,那么PHP也会抛出一个错误,您可以直接表现为有一行,但是1)检查(is_resource($result)),然后2)while($row=mysql_query($result))的标准过程允许您容纳空的结果集,而不会出现麻烦的异常,并且只使用简单的if/then/else。为什么要把事情复杂化?@hexparrot你似乎不懂我的代码。只有当
mysql\u query
返回的值为false(即不是资源)时,它才会抛出异常。根据我的经验,查询后最常见的逻辑叉是“结果集是空的”,因此我把它包含在我的例子中。@ HePARROLD:考虑到可以中断“执行查询,如果失败,抛出异常”。此时,当您调用新的
query
函数时,如果它返回,那么查询肯定是成功的。最终结果是,除其他外,您不必检查每个查询是否成功,也不必为非致命的内容抛出PHP错误。