从 mysqli_query 获取成功/失败响应

Posted

技术标签:

【中文标题】从 mysqli_query 获取成功/失败响应【英文标题】:get success/failure response from mysqli_query 【发布时间】:2013-04-26 14:19:36 【问题描述】:

我正在从用户那里收集信息,然后将它们添加到表格中。

$insert = "INSERT INTO jos_activeagents (RINGPHONE, AGENTUID, FNAME, LNAME) VALUES ('(618) 717-2054','".$result['AGTBRDIDMM']."','".$result['AGTFNAME']."','".$result['AGTLNAME']."')";

$set = mysqli_query($link,$insert);

AGENTUID 是唯一键。如果用户尝试使用重复的唯一键提交,我会收到错误(当然)。

现在,我将如何知道是否以及何时发生错误,然后将响应返回到页面?我知道mysqli_get_warnings(),但 php 手册没有显示任何示例。

我也试过先在表中查找AGENTUID

$check = "SELECT * FROM jos_activeagents WHERE AGENTUID = '".$agt."'";

$runcheck = mysqli_query($link,$check);

$rescheck = mysqli_fetch_assoc($runcheck);

if($rescheck != null)

    echo 'This Agent ID is already enrolled.'


但这似乎很草率。有更好的方法吗?

【问题讨论】:

不要使用 mysql_* 因为...哦等等,不使用 mysql_* 的人!恭喜! :D 当不使用 mysql_* 时,数据被直接放入查询中。如果这不仅仅是一个例子,仍然可能容易受到 SQL 注入的攻击! @WouterH:即使使用mysqli_real_escape_string? php.net/manual/en/mysqli.real-escape-string.php mysqli_query NOT 返回 null。要么你得到一个语句句柄,要么得到一个布尔值 false,如果有一个失败。 如果您使用SQL placeholders 和bind_param,则不需要直接使用转义函数。不要使用字符串连接来组合查询。你最终会让自己陷入困境。 【参考方案1】:

您可以使用mysqli_error()查看是否发生错误

if (mysqli_error($runcheck ))

   // an error eoccurred

在您的特定示例中,您最好在插入之前检查行是否存在。你的例子很接近,但最好使用mysqli_num_rows()

$check = "SELECT * FROM jos_activeagents WHERE AGENTUID = '".$agt."'";
$runcheck = mysqli_query($link,$check);
if (mysqli_num_rows($runcheck) > 0)

    // username in use

【讨论】:

这种方法使用单个查询并返回一个指示插入状态的字符串:***.com/questions/13985950/mysql-if-exists-error 不知道为什么您没有对正确答案投赞成票。 +1 我的朋友

以上是关于从 mysqli_query 获取成功/失败响应的主要内容,如果未能解决你的问题,请参考以下文章

mysqli_query() 没有响应,甚至 mysqli_error() 也没有给出错误信息

小米碰碰贴 碰一下响一声 也没有显示读写成功或失败 也没有提示 这怎么回事??

如何从贝宝获得成功或失败响应?

AFHTTPRequestOperationManager 如何从服务器获取响应

错误 Alamofire 5 响应成功和响应失败

AWS ElasticBeanstalk NodeJS-502错误:从上游读取响应头时,recv()失败(104:对等连接重置)