Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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 Isn';不需要调用mysqli函数来插入值吗?_Php_Mysqli - Fatal编程技术网

Php Isn';不需要调用mysqli函数来插入值吗?

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); } 就像你看到的,这应该行得通,但

我正在学习MySQL和PHP,我已经看到,通过这段代码,您可以在数据库中插入值:

$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
将包含have
TRUE
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
。什么是“查询对象”?