C 如何在自己的php扩展中使用PDO支持?

C 如何在自己的php扩展中使用PDO支持?,c,pdo,php-extension,C,Pdo,Php Extension,我想在我的php扩展中使用PDO MySQL(使用c语言,而不是php中的简单PDO包装类),但我不知道这个例子,有人能帮我吗?谢谢。我的问题已由谷歌解决,按照本指南可能会解决您的问题,它可以用于其他zend类 注意:需要关于如何在c中创建php扩展的基本概念 1.您需要修补origin zend_call_方法,因为origin zend_call_方法 只支持少于3个参数,PDO的构造函数使用1-4个参数 PDO::_构造()(字符串$dsn[,字符串$username[,字符串$passw

我想在我的php扩展中使用PDO MySQL(使用c语言,而不是php中的简单PDO包装类),但我不知道这个例子,有人能帮我吗?谢谢。

我的问题已由谷歌解决,按照本指南可能会解决您的问题,它可以用于其他zend类

注意:需要关于如何在c中创建php扩展的基本概念

1.您需要修补origin zend_call_方法,因为origin zend_call_方法 只支持少于3个参数,PDO的构造函数使用1-4个参数

PDO::_构造()(字符串$dsn[,字符串$username[,字符串$password[,数组$driver_选项]])

在php源目录中找到“zend_interfaces.c”(可能在“php-5.x.x-src\zend\zend_interfaces.c”中),目标是“zend_call_method”部分,将其复制粘贴到代码中,然后执行以下操作:

$foo = new foo();
$foo->bar(); // connect by PDO and update $foo->pdo
// you can use pdo property now
var_dump($foo->pdo->query("select * from table")->fetchAll());
注意:您可能需要一些宏:

#define call_method(obj, obj_ce, fn_proxy, function_name, retval, param_count, params) \
    zend_call_method_n_params(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, param_count, params TSRMLS_CC)

#define call_function(function_name, retval, param_count, params) \
    zend_call_method(NULL, NULL, NULL, function_name, retval, param_count, params)

#define call_construct(obj, obj_ce, param_count, params) \
    call_method(obj, obj_ce, &obj_ce->constructor, obj_ce->constructor->common.function_name, NULL, param_count, params)
2.你好,世界

设置你的代码,我们需要一个属性“pdo”

在php中,可以这样调用:

$foo = new foo();
$foo->bar(); // connect by PDO and update $foo->pdo
// you can use pdo property now
var_dump($foo->pdo->query("select * from table")->fetchAll());

它很好用。干杯

我的问题是由谷歌解决的,按照这个指南可能会解决你的问题,它可以用于其他zend类

注意:需要关于如何在c中创建php扩展的基本概念

1.您需要修补origin zend_call_方法,因为origin zend_call_方法 只支持少于3个参数,PDO的构造函数使用1-4个参数

PDO::_构造()(字符串$dsn[,字符串$username[,字符串$password[,数组$driver_选项]])

在php源目录中找到“zend_interfaces.c”(可能在“php-5.x.x-src\zend\zend_interfaces.c”中),目标是“zend_call_method”部分,将其复制粘贴到代码中,然后执行以下操作:

$foo = new foo();
$foo->bar(); // connect by PDO and update $foo->pdo
// you can use pdo property now
var_dump($foo->pdo->query("select * from table")->fetchAll());
注意:您可能需要一些宏:

#define call_method(obj, obj_ce, fn_proxy, function_name, retval, param_count, params) \
    zend_call_method_n_params(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, param_count, params TSRMLS_CC)

#define call_function(function_name, retval, param_count, params) \
    zend_call_method(NULL, NULL, NULL, function_name, retval, param_count, params)

#define call_construct(obj, obj_ce, param_count, params) \
    call_method(obj, obj_ce, &obj_ce->constructor, obj_ce->constructor->common.function_name, NULL, param_count, params)
2.你好,世界

设置你的代码,我们需要一个属性“pdo”

在php中,可以这样调用:

$foo = new foo();
$foo->bar(); // connect by PDO and update $foo->pdo
// you can use pdo property now
var_dump($foo->pdo->query("select * from table")->fetchAll());

它很好用。干杯

您计划在扩展中使用PDO做什么?它主要用于PHP代码的服务,而不是用于其他扩展。检查感谢Steven Farley的标记修改,是的,它是用c编写的。@Dashwuff我想做一个访问控制,它的安全性,所以不能使用PHP代码。感谢@NullPointer的标记修改您计划在扩展中使用PDO做什么?它主要是为PHP代码服务,而不是为其他扩展服务。感谢Steven Farley修改标记,是的,它是用c编写的。@Dashwuff我想要一个访问控制,它的安全性,所以不能使用PHP代码。感谢@NullPointer修改标记