如何使用 PHP 在 mysql 或 pdo 中显示 ALTER 语句的结果?
How do you show the result of an ALTER statement in mysql or pdo using PHP?
当我在命令行上运行查询时,我得到类似这样的结果:
Query OK, 0 rows affected (0.23 sec)
Records: 0 Duplicates: 0 Warnings: 0
有没有办法使用 PHP PDO 获取上述信息?
没有简单的方法,因为此信息是由 mysql_info()
C API 调用 return 编辑的(这是 C API,而不是 mysql API 几年前在 php 中被弃用,尽管它确实实现了相同的调用),但在过于特定于供应商的 PDO 中未实现。
您可以使用 PDOStatement::rowCount() 到 return 受影响的行数或匹配的行数。但是,该方法 return 的值取决于您如何配置与 mysql:
的连接
如果您提供 PDO::MYSQL_ATTR_FOUND_ROWS
作为配置选项,那么 rowCount()
return 匹配的行:
$connection = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
如果您省略此选项,则 rowCount()
return 会影响行。因此,没有简单的方法可以在一个连接中获取这两个信息。
要获得警告的数量,您可以发出 show warnings sql 语句并循环遍历其结果集并计算结果集中的警告(或者可能是注释)。 show warnings
结果也包括错误和注释,这就是您可能需要过滤列表的原因。
我不知道你如何获得最后一条语句的重复次数。
mysqli
如果您使用 mysqli 而不是 PDO,那么您可以使用 mysqli_info() 调用来获取您要查找的数据。
并且...使用 microtime(true)
获取时间。并执行 SHOW WARNINGS
(就好像它是 SELECT
)以获得任何警告(或 none)。
当我在命令行上运行查询时,我得到类似这样的结果:
Query OK, 0 rows affected (0.23 sec)
Records: 0 Duplicates: 0 Warnings: 0
有没有办法使用 PHP PDO 获取上述信息?
没有简单的方法,因为此信息是由 mysql_info()
C API 调用 return 编辑的(这是 C API,而不是 mysql API 几年前在 php 中被弃用,尽管它确实实现了相同的调用),但在过于特定于供应商的 PDO 中未实现。
您可以使用 PDOStatement::rowCount() 到 return 受影响的行数或匹配的行数。但是,该方法 return 的值取决于您如何配置与 mysql:
的连接如果您提供 PDO::MYSQL_ATTR_FOUND_ROWS
作为配置选项,那么 rowCount()
return 匹配的行:
$connection = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
如果您省略此选项,则 rowCount()
return 会影响行。因此,没有简单的方法可以在一个连接中获取这两个信息。
要获得警告的数量,您可以发出 show warnings sql 语句并循环遍历其结果集并计算结果集中的警告(或者可能是注释)。 show warnings
结果也包括错误和注释,这就是您可能需要过滤列表的原因。
我不知道你如何获得最后一条语句的重复次数。
mysqli
如果您使用 mysqli 而不是 PDO,那么您可以使用 mysqli_info() 调用来获取您要查找的数据。
并且...使用 microtime(true)
获取时间。并执行 SHOW WARNINGS
(就好像它是 SELECT
)以获得任何警告(或 none)。