PHP $connection->query($sql) 在 AJAX 调用期间从 PHP 脚本调用时返回 FALSE? [复制]

Posted

技术标签:

【中文标题】PHP $connection->query($sql) 在 AJAX 调用期间从 PHP 脚本调用时返回 FALSE? [复制]【英文标题】:PHP $connection->query($sql) returns FALSE when called from a PHP script during an AJAX call? [duplicate] 【发布时间】:2017-04-25 23:49:52 【问题描述】:

我有一个 php 页面 index.php。在此页面中,我正在创建与 mysql 数据库 (using mysqli) 的连接,并执行一些 MySQL 查询。我在index.php 文件的开头打开连接($connection = new mysqli("localhost", "root", "");),并在index.php 文件的末尾关闭连接($connection->close())。

index.phphtml <head> 部分中,我包含了一个 JQuery 脚本,该脚本对另一个 PHP 文件 load_more_data.php 进行 AJAX 调用,从而进行一些 MySQL SELECT 查询。此 JQuery 脚本在单击按钮时被调用。

我目前正在做的是在load_more_data.php 文件中,我打开一个与同一个数据库的新连接(通过调用$connection = new mysqli("localhost", "root", "");)然后执行查询。 但有一个问题:当我通过从index.php 执行$connection->query($sql) 执行查询时,运行正常并返回正确的数据集。但是当我从 load_more_data.php 执行相同的查询时,$connection->query($sql) 返回 FALSE

问题:

我有两个问题:

    这是正确的方法吗?那是在每个需要查询数据库的文件中创建一个新的连接对象吗?或者有没有办法将一个连接对象从服务器端(index.php)传递到客户端(JQuery 脚本),然后 AJAX 将连接对象发送回服务器端(load_more_data.php)?我该怎么办?

    $connection->query($sql)load_more_data.php 调用时,当它返回从index.php 调用时从数据库获取的正确预期数据集时,为什么会返回 FALSE?

【问题讨论】:

您能否分享相关代码,即您load_more_data.php 文件中的代码?如果它返回 false,那么 $connection->error 中应该有一个错误在等着你,所以把它回显出来,你会看到的。 PHP 和 MySQL 都不关心请求是否使用 AJAX。您的查询可能包含错误。发布代码并向您的代码添加错误检查。 【参考方案1】:

回答你的两个问题。

1.

PHP 是一种服务器端脚本语言。 javascript(包括 Ajax 和 JQuery)是一种客户端脚本语言。

为了让您使用 javascript 从数据库中获取值,您通常必须通过服务器,使用 ajax 连接到数据库,因为大多数数据库不允许外部访问,作为安全措施.

当您使用 ajax 调用 php 文件时,您必须连接到该文件中的数据库,因为该文件未包含在您调用的文件中,这意味着它需要文件中的新连接你从ajax调用。否则您将无法访问数据。

如果您将连接从服务器传递到客户端,最终将允许客户端访问数据库并利用它,因为用户将能够看到从服务器传递到客户端并再次传递到服务器的数据。

2.

正如 Charlotte Dunois 所说,您是否通过一种语言而不是另一种语言来查询数据库并不重要。您从查询中获得结果背后的最终原因如下:

$connection->query($sql)

在查询中出现错误时返回 false,在本例中为 $sql 的值。另一个原因可能是您尚未连接并选择数据库。如果您没有收到通知,找出该错误的唯一方法是使用mysqli_error

【讨论】:

谢谢,我的查询$sql 是正确的。我的错误是No database selected。但是非常感谢你,我从你的解释中了解到。 我会将其添加到答案中,但我确实通过问题一间接回答了它。但是。

以上是关于PHP $connection->query($sql) 在 AJAX 调用期间从 PHP 脚本调用时返回 FALSE? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

mysqli 对象风格封装

PHP创建连接MySQL,表

PHP7预编译mysqli查询操作

<php>过时方法连接数据库代码

(php)我在“get”方法链接中获得了额外的代码

如何使用 PHP 将 sql 属性回显到 HTML 表