包含mysqlnd源碼細節角度認識的詞條

本文目錄一覽:

linux配置源代碼包時出現下面錯誤

“exact error that occured. This usually means GLIB is incorrectly installed”

是不是由於GLIB的版本太低了?查看你的軟件的readme啊,確認你的系統是否滿足所有依賴關係。

Linux 源代碼包配置PHP時出錯:configure: error: GD build test failed. Please check the config.log

./configure –prefix=/usr/local/php/ –with-apxs2=/usr/local/apache2/bin/apxs –with-config-file-path=/usr/local/php/lib/ –with-config-file-scan-dir=/usr/local/etc/ –with-zlib –with-curl –enable-bcmath –with-jpeg-dir –with-png-dir –with-xpm-dir –with-freetype-dir –with-gd –with-mhash –enable-mbstring –with-mcrypt –with-libxml-dir –with-iconv-dir –with-pcre-dir –enable-mysqlnd –with-mysql=mysqlnd –with-mysqli=mysqlnd

看一下是不是有庫不全?

ubuntu16.04 安裝 php 5.6.30 對應的 mysqlnd 版本是多少

如果你用的是apt-get安裝的話,php的版本就是軟件中心配置好了的,這個你就沒法決定安裝版本。如果你想安裝指定版本的話,就只有到官網去下載源碼,然後自己編譯安裝了

求mysql_query 內部源碼

Sends an SQL query to MySQL */

PHP_FUNCTION(mysql_query)

{

    php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_STORE_RESULT);

}

static void php_mysql_do_query(INTERNAL_FUNCTION_PARAMETERS, int use_store)

{

    char *query;

    size_t query_len;

    zval *mysql_link = NULL;

    php_mysql_conn *mysql;

if (zend_parse_parameters(ZEND_NUM_ARGS(), “s|r”, query, query_len, mysql_link) == FAILURE) {

    return;

}

if (!mysql_link) {

    zend_resource *res = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);

    CHECK_LINK(res);

    mysql = (php_mysql_conn*)res-ptr;

} else {

    if (!(mysql = (php_mysql_conn *)zend_fetch_resource2(Z_RES_P(mysql_link), “MySQL-Link”, le_link, le_plink))) {

        RETURN_FALSE;

    }

}

php_mysql_do_query_general(mysql, query, query_len, NULL, use_store, return_value);

}

/* {{{ php_mysql_do_query_general

  */

 static void php_mysql_do_query_general(php_mysql_conn *mysql, char *query, int query_len, char *db, int use_store, zval *return_value)

 {

         MYSQL_RES *mysql_result;

 

         if (db) {

                 if (!php_mysql_select_db(mysql, db)) {

                         RETURN_FALSE;

                 }

         }

 

         PHPMY_UNBUFFERED_QUERY_CHECK();

 

         MYSQL_DISABLE_MQ;

 

 #ifndef MYSQL_USE_MYSQLND

         /* check explain */

         if (MySG(trace_mode)) {

                 if (!strncasecmp(“select”, query, 6)){

                         MYSQL_ROW       row;

 

                         char *newquery;

                         int newql = spprintf(newquery, 0, “EXPLAIN %s”, query);

                         mysql_real_query(mysql-conn, newquery, newql);

                         efree (newquery);

                         if (mysql_errno(mysql-conn)) {

                                 php_error_docref(“”, E_WARNING, “%s”, mysql_error(mysql-conn));

                                 RETURN_FALSE;

                         }

                         else {

                         mysql_result = mysql_use_result(mysql-conn);

                                 while ((row = mysql_fetch_row(mysql_result))) {

                                         if (!strcmp(“ALL”, row[1])) {

                                                 php_error_docref(“”, E_WARNING, “Your query requires a full tablescan (table %s, %s rows affected). Use EXPLAIN to optimize your query.”, row[0], row[6]);

                                         } else if (!strcmp(“INDEX”, row[1])) {

                                                 php_error_docref(“”, E_WARNING, “Your query requires a full indexscan (table %s, %s rows affected). Use EXPLAIN to optimize your query.”, row[0], row[6]);

                                         }

                                 }

                                 mysql_free_result(mysql_result);

                         }

                 }

         } /* end explain */

 #endif

 

         /* mysql_query is binary unsafe, use mysql_real_query */

 #if MYSQL_VERSION_ID  32199

         if (mysql_real_query(mysql-conn, query, query_len)!=0) {

                 /* check possible error */

                 if (MySG(trace_mode)){

                         if (mysql_errno(mysql-conn)){

                                 php_error_docref(“”, E_WARNING, “%s”, mysql_error(mysql-conn));

                         }

                 }

                 RETURN_FALSE;

         }

 #else

         if (mysql_query(mysql-conn, query)!=0) {

                 /* check possible error */

                 if (MySG(trace_mode)){

                         if (mysql_errno(mysql-conn)){

                                 php_error_docref(“”, E_WARNING, “%s”, mysql_error(mysql-conn));

                         }

                 }

                 RETURN_FALSE;

         }

 #endif

         if(use_store == MYSQL_USE_RESULT) {

                 mysql_result = mysql_use_result(mysql-conn);

         } else {

                 mysql_result = mysql_store_result(mysql-conn);

         }

         if (!mysql_result) {

                 if (PHP_MYSQL_VALID_RESULT(mysql-conn)) { /* query should have returned rows */

                         php_error_docref(NULL, E_WARNING, “Unable to save result set”);

                         RETURN_FALSE;

                 } else {

                         RETURN_TRUE;

                 }

         }

         MySG(result_allocated)++;

         ZVAL_RES(return_value, zend_register_resource(mysql_result, le_result));

         

         if (use_store == MYSQL_USE_RESULT) {

                 mysql-active_result_res = Z_RES_P(return_value);

                 Z_ADDREF_P(return_value);

         }

 }

 /* }}} */

時時教大家搭建PHP環境 怎麼用PHP源碼安裝

[Raykaeso@LAMP httpd-2.4.17]# cd /LAMP

[Raykaeso@LAMP LAMP]# yum -y install libxml2-devel #不裝這個編譯不了PHP5.6

[Raykaeso@LAMP LAMP]# yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel png jpeg gd #開啟GD庫需要的依賴

[Raykaeso@LAMP LAMP]# yum -y install curl curl-devel #開啟CURL庫需要的依賴

[Raykaeso@LAMP LAMP]# tar -zvxf php-5.6.16.tar.gz

[Raykaeso@LAMP LAMP]# cd php-5.6.16

[Raykaeso@LAMP php-5.6.16]# ./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc –enable-fpm –enable-sysvsem –enable-sockets –enable-pcntl –enable-mbstring –enable-mysqlnd –enable-pdo –with-pdo-mysql –enable-opcache –enable-shmop –enable-zip –enable-ftp –enable-gd-native-ttf –enable-wddx –enable-soap –with-png-dir –with-freetype-dir –with-jpeg-dir –with-gd –with-mysqli

[Raykaeso@LAMP php-5.6.16]# make make install

拷貝一份正式的php-fpm.conf和php.ini配置文件

[Raykaeso@LAMP php-5.6.16]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

[Raykaeso@LAMP php-5.6.16]# cp ./php.ini-production /usr/local/php/etc/php.ini

PHP7.0打開擴展功能要怎樣才能和mysql相連?

第一步:進入php源碼中的”ext/mysql”目錄下

第二步:在當前目錄下運行phpize命令:/usr/local/php524/bin/phpize

phpize的規則:去哪個目錄下運行phpize文件,那麼就會在該目錄下生成一個configure文件。

第三步:運行剛才生成的configure文件

命令: ./configure –with-php-config=/usr/local/php524/bin/php-config –with-mysql=/usr/local/mysql/

這裡最關鍵的是通過–with-mysql參數告訴mysql客戶端的位置。這樣才能生成mysql.so。

實驗的時候,沒有加這個參數,結果錯誤:

./configure –with-php-config=/usr/local/php524/bin/php-config

第四步:編譯生成.so文件

第五步:配置php引擎加載該擴展。

補充一下:就是去php.ini文件中修改一下配置,加載mysql.so這個擴展(這個擴展文件要放到php指定的擴展目錄下面去)

第六步:測試php引擎是否成功加載該擴展編寫文件phpinfo.php,內容是:?php ehco phpinfo(); ?

運行後,可以看到有如下信息顯示:mysqlMySQLSupport    enabledActive PersistentLinks     0

Active Links     0

Client API version     5.1.55

MYSQL_MODULE_TYPE     no value

MYSQL_SOCKET     /tmp/mysql.sock

MYSQL_INCLUDE     no value

MYSQL_LIBS     no value

通過這樣的方式可以確認,php引擎已經成功加載了mysql.so擴展。

第七步:已經生成的mysql.so。編寫php代碼測試是否能連接mysql。

一、為什麼書中一般是常常是這樣的順序安裝。

先安裝mysql,然後再安裝php,很少看到先安裝php,後安裝mysql?

這樣做。是基於下面原因:安裝好mysql後。mysql.so這個模塊才能生成。記得一個細節:在安裝php的時候,需要提供mysql的路徑。由php幫助編譯生成mysql.so模塊。mysql.so這個模塊是在安裝好php的時候生成的。

生成這個模塊需要用到一個東西:mysql客戶端。如果先安裝php,後安裝mysql。那麼無法按照原來的方式(由php幫助生成mysql.so模塊)掛接mysql.so。通過實踐,發現使用phpize工具生成mysql.so可以解決這個問題。

二、實踐生成mysql.so的過程。

大體思路:需要用到php的源碼包才行。通過源碼包中提供的phpize文件(一個專門掛接php擴展的工具)

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/150525.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-08 14:54
下一篇 2024-11-08 14:54

相關推薦

  • int類型變量的細節與注意事項

    本文將從 int 類型變量的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變量進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變量。 一、定義與聲明 int…

    編程 2025-04-29
  • 雲智直聘 源碼分析

    本文將會對雲智直聘的源碼進行分析,包括前端頁面和後端代碼,幫助讀者了解其架構、技術實現以及對一些常見的問題進行解決。通過本文的閱讀,讀者將會了解到雲智直聘的特點、優勢以及不足之處,…

    編程 2025-04-29
  • 從ga角度解讀springboot

    springboot作為目前廣受歡迎的Java開發框架,其中的ga機制在整個開發過程中起着至關重要的作用。 一、ga是什麼 ga即Group Artifacts的縮寫,它是Mave…

    編程 2025-04-29
  • Python中角度變弧度

    本文將從以下幾個方面詳細闡述Python中角度變弧度的實現方法和應用場景。 一、角度和弧度的概念 在Python中,角度和弧度這兩個概念是經常用到的。角度是指單位圓上的作用角度,其…

    編程 2025-04-28
  • Python網站源碼解析

    本文將從多個方面對Python網站源碼進行詳細解析,包括搭建網站、數據處理、安全性等內容。 一、搭建網站 Python是一種高級編程語言,適用於多種領域。它也可以用於搭建網站。最常…

    編程 2025-04-28
  • 源碼是什麼

    源碼是一段計算機程序的原始代碼,它是程序員所編寫的可讀性高、理解性強的文本。在計算機中,源碼是指編寫的程序代碼,這些代碼按照一定規則排列,被計算機識別並執行。 一、源碼的組成 源碼…

    編程 2025-04-27
  • 從多個角度用法介紹lower down

    lower down是一個常用於編程開發中的操作。它可以對某個值或變量進行降低精度的處理,非常適合於一些需要精度不高但速度快的場景。那麼,在本文中,我們將從多個角度解析lower …

    編程 2025-04-27
  • Go源碼閱讀

    Go語言是Google推出的一門靜態類型、編譯型、並髮型、語法簡單的編程語言。它因具有簡潔高效,內置GC等優秀特性,被越來越多的開發者所鍾愛。在這篇文章中,我們將介紹如何從多個方面…

    編程 2025-04-27
  • 數學符號角度的讀法

    數學符號是用來表示數學概念、關係和運算的工具。正確理解數學符號的意義對於學習數學、應用數學至關重要。本文將從多個方面介紹數學符號角度的讀法。 一、基礎符號 1、數學符號:&#822…

    編程 2025-04-27
  • 從初學者角度出發,noc Python比賽

    本文將從初學者的角度出發,深入探討noc Python比賽。包括如何準備比賽,比賽難度分析,以及必備的編程技能等。我們將一步一步帶領大家進入Python編程的世界。 一、比賽準備 …

    編程 2025-04-27

發表回復

登錄後才能評論