大佬教程收集整理的这篇文章主要介绍了“为参数 0 指定了无效的 PHP 类型”。用于简单的 PHP/SQL 调用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在 windows Server 2012 R 2 上使用 php 8 和 MS sql Server 2014。我相信我已经更新了 sql 的 php 驱动程序。
<?php
$connectionInfo = array( "Database"=>"$database","UID"=>"$username","PWD"=>"$password","CharacterSet"=>"UTF-8");
$conn = sqlsrv_connect( $hostname,$connectionInfo);
if( !$conn ) {
echo "Connection Could not be established.<br />";
dIE( print_r( sqlsrv_errors(),truE));
}
$sql = "{CALL countRows2 (?)}";
$nbrRows = 0;
$varpar1 = array(&$nbrRows,sqlSRV_ParaM_INOUT,sqlSRV_phpTYPE_INT,sqlSRV_sqlTYPE_int);
$params = array(&$varpar1);
$stmt = sqlsrv_prepare( $conn,$sql,$params);
if( !$stmt ) {
dIE( print_r( sqlsrv_errors(),truE));
}
error_log("Prepared worked");
if( sqlsrv_execute ($stmt) === false ) {
error_log("Execute Failed ");
dIE( print_r( sqlsrv_errors(),truE));
}
error_log("Nbr Rows = " . $nbrRows);
?>
还有这个存储过程
SET ANSI_NulLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,name>
-- Create date: <Create Date,>
-- Description: <Description,>
-- =============================================
ALTER PROCEDURE [dbo].[countRows2]
-- Add the parameters for the stored procedure here
@count INT OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN TRY
-- Insert statements for procedure here
SET @count = (SELECT COUNT(*) FROM dbo.entrIEs);
END TRY
BEGIN CATCH
declare @error int,@message varchar(4000),@xstatE int;
SELEct @error = ERROR_@R_772_10793@ER(),@message = ERROR_messaGE();
raiserror ('Caught exception: %d: %s',16,1,@error,@messagE) ;
END CATCH
END
我明白了:
准备工作执行失败的阵列( [0] => 数组 ( [0] => imsSP [sqlSTATE] => imsSP [1] => -16 [代码] => -16 [2] => 为参数 0 指定了无效的 php 类型。 [消息] => 为参数 0 指定了无效的 php 类型。 )
)
如果我在调用中添加一个额外参数或省略一个参数,系统会抱怨签名不匹配,因此 php 和 sql DB 之间似乎存在某种联系。
但是为什么它会抱怨无效的 php 类型?
如果我这样做
$params = array(&$nbrRows);
$stmt = sqlsrv_prepare( $conn,$params);
if( !$stmt ) {
dIE( print_r( sqlsrv_errors(),truE));
}
error_log("Prepared worked");
if( sqlsrv_execute ($stmt) === false ) {
error_log("Execute Failed ");
dIE( print_r( sqlsrv_errors(),truE));
}
error_log("Nbr Rows = " . $nbrRows);
不会抛出任何错误,但 $nbrRows 始终为 0:
准备工作的 Nbr Rows = 0
感谢您的建议。
这有效:
$varpar1 = array(&$nbrRows,SQLSRV_PARAM_INOUT,SQLSRV_phpTYPE_INT,SQLSRV_SQLTYPE_int);
$params = array($varpar1);
以上是大佬教程为你收集整理的“为参数 0 指定了无效的 PHP 类型”。用于简单的 PHP/SQL 调用全部内容,希望文章能够帮你解决“为参数 0 指定了无效的 PHP 类型”。用于简单的 PHP/SQL 调用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。