Php Isn';不需要调用mysqli函数来插入值吗?
我正在学习MySQL和PHP,我已经看到,通过这段代码,您可以在数据库中插入值:Php Isn';不需要调用mysqli函数来插入值吗?,php,mysqli,Php,Mysqli,我正在学习MySQL和PHP,我已经看到,通过这段代码,您可以在数据库中插入值: $sql = "INSERT QUERY..." $insert = mysqli_query($connection, $sql); if($insert){ echo "Insert Worked"; }else{ echo "Insert error". mysqli_error($connection); } 就像你看到的,这应该行得通,但
$sql = "INSERT QUERY..."
$insert = mysqli_query($connection, $sql);
if($insert){
echo "Insert Worked";
}else{
echo "Insert error". mysqli_error($connection);
}
就像你看到的,这应该行得通,但我不知道怎么做。如果您从未调用函数mysqli_query,那么它只是存储在$insert变量中。在if条件下调用它
另一件引起我注意的事情是,您在连接查询中得到了插入错误,这不是一件坏事吗?我的意思是,如果您在不同的查询中有很多错误,这不是很有用,这是查找错误的方法吗?您正在调用
mysqli\u query
,并将结果存储在$insert
中。由于您使用的是insert语句,$insert
将包含haveTRUE
或FALSE
,具体取决于insert语句是否成功。每个连接一次能够处理一个查询;这就是MySQL和其他客户机-服务器风格的数据库系统的工作方式。mysqliapi设计者决定通过连接对象而不是查询对象来访问错误。这是一个合理的决定;通常,像您这样的应用程序必须在运行新查询之前处理错误,因此在查询对象上保留错误的意义不大
错误由返回的mysqli\u query()
返回值表示。如果它真的回来了,你可以用它做更多的事情。如果你对“falsy”和“truthy”不确定,请查查tehm
但是,从根本上说,这些都是API设计师为创建有用的API而做出的决定
(当然,您在代码示例中使用了
mysqli_query()
)在大多数语言中,包括PHP,在将=
(赋值运算符)存储到给定变量之前,都会对其进行求值。赋值运算符=
后面的任何内容,直到
被解析为一个表达式,该表达式可能包含函数调用立即计算这些函数调用,并在表达式的其余计算中使用这些函数调用的结果。
在您的情况下,调用mysqli\u query()
函数并插入行,然后mysqli\u query()
返回的值存储在变量$insert
中在计算if
语句时,不会调用它。
关于您的错误处理问题,如@O.Jones所说,每个连接一次运行一个查询,因此,如果您有多个查询,您将需要运行一个查询,然后检查错误并在一系列中执行此操作
此外,正如@Dharman所提到的,您应该谨慎使用
mysqli_error()
,因为除非您知道并有一个经过深思熟虑的用例,否则不希望在生产中使用它。阅读更多关于@Dharman在这里所说的内容:我不明白为什么您认为您从未调用过mysqli\u query()
,您是在创建$insert
变量时调用它的。if
条件基本上是确保$insert
不是false
,如果出现问题,mysqli\u query()
将返回代码>显然在调用mysqli\u查询。我真的不明白你在说什么/在问什么?$insert
变量存储执行mysqli\u query()
函数的结果,如果函数失败,它是FALSE
,if
语句检查它是否失败。是的,现在我知道了,我不知道变量的=后面的所有内容都是在存储后计算的。要清楚,您不是将函数本身存储在$insert中,而是存储函数的结果,即函数执行后返回的值。您不应该手动检查错误。请阅读:@Dharman我决不是建议使用mysqli_error()
函数,而是我的答案更侧重于如何处理类似mysqli_error()
的函数组,即返回上次执行的状态。如果你有什么要补充的,请说。您的链接与问题的上下文无关。OP没有问他/她是否应该使用mysqli\u error()
,他/她问,如果有多个查询,他们必须检查每个查询的状态怎么办?这样的功能不是没有用吗?@Dharman你读过提问者提出的问题了吗?提问者以PHP初学者的身份提出了这些问题。我并不主张他/她是否应该检查每个查询的错误,我只是建议如果他们愿意,他/她的选择是什么。就像我说的,如果你有什么有用的补充,你可以编辑我的答案。我唯一要补充的是,不应该有if
语句。如果正确启用错误报告,则绝对没有理由检查返回变量。@Dharman我知道你是对的,但是,你是否应用了问题的上下文?OP绝对是一个初学者,mysqli\u error()
只是为了调试的目的。如果您同意,我可以添加您的链接以阻止使用mysqli\u error
。什么是“查询对象”?