[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Plugins may load this file to gain access to special helper functions for 4 * plugin installation. This file is not included by WordPress and it is 5 * recommended, to prevent fatal errors, that this file is included using 6 * require_once. 7 * 8 * These functions are not optimized for speed, but they should only be used 9 * once in a while, so speed shouldn't be a concern. If it is and you are 10 * needing to use these functions a lot, you might experience time outs. If you 11 * do, then it is advised to just write the SQL code yourself. 12 * 13 * check_column( 'wp_links', 'link_description', 'mediumtext' ); 14 * if ( check_column( $wpdb->comments, 'comment_author', 'tinytext' ) ) { 15 * echo "ok\n"; 16 * } 17 * 18 * $error_count = 0; 19 * $tablename = $wpdb->links; 20 * // Check the column. 21 * if ( ! check_column( $wpdb->links, 'link_description', 'varchar( 255 )' ) ) { 22 * $ddl = "ALTER TABLE $wpdb->links MODIFY COLUMN link_description varchar(255) NOT NULL DEFAULT '' "; 23 * $q = $wpdb->query( $ddl ); 24 * } 25 * 26 * if ( check_column( $wpdb->links, 'link_description', 'varchar( 255 )' ) ) { 27 * $res .= $tablename . ' - ok <br />'; 28 * } else { 29 * $res .= 'There was a problem with ' . $tablename . '<br />'; 30 * ++$error_count; 31 * } 32 * 33 * @package WordPress 34 * @subpackage Plugin 35 */ 36 37 /** Load WordPress Bootstrap */ 38 require_once dirname( __DIR__ ) . '/wp-load.php'; 39 40 if ( ! function_exists( 'maybe_create_table' ) ) : 41 /** 42 * Creates a table in the database if it doesn't already exist. 43 * 44 * @since 1.0.0 45 * 46 * @global wpdb $wpdb WordPress database abstraction object. 47 * 48 * @param string $table_name Database table name. 49 * @param string $create_ddl SQL statement to create table. 50 * @return bool True on success or if the table already exists. False on failure. 51 */ 52 function maybe_create_table( $table_name, $create_ddl ) { 53 global $wpdb; 54 55 foreach ( $wpdb->get_col( 'SHOW TABLES', 0 ) as $table ) { 56 if ( $table === $table_name ) { 57 return true; 58 } 59 } 60 61 // Didn't find it, so try to create it. 62 $wpdb->query( $create_ddl ); 63 64 // We cannot directly tell that whether this succeeded! 65 foreach ( $wpdb->get_col( 'SHOW TABLES', 0 ) as $table ) { 66 if ( $table === $table_name ) { 67 return true; 68 } 69 } 70 71 return false; 72 } 73 endif; 74 75 if ( ! function_exists( 'maybe_add_column' ) ) : 76 /** 77 * Adds column to database table, if it doesn't already exist. 78 * 79 * @since 1.0.0 80 * 81 * @global wpdb $wpdb WordPress database abstraction object. 82 * 83 * @param string $table_name Database table name. 84 * @param string $column_name Table column name. 85 * @param string $create_ddl SQL statement to add column. 86 * @return bool True on success or if the column already exists. False on failure. 87 */ 88 function maybe_add_column( $table_name, $column_name, $create_ddl ) { 89 global $wpdb; 90 91 foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { 92 if ( $column === $column_name ) { 93 return true; 94 } 95 } 96 97 // Didn't find it, so try to create it. 98 $wpdb->query( $create_ddl ); 99 100 // We cannot directly tell that whether this succeeded! 101 foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { 102 if ( $column === $column_name ) { 103 return true; 104 } 105 } 106 107 return false; 108 } 109 endif; 110 111 /** 112 * Drops column from database table, if it exists. 113 * 114 * @since 1.0.0 115 * 116 * @global wpdb $wpdb WordPress database abstraction object. 117 * 118 * @param string $table_name Database table name. 119 * @param string $column_name Table column name. 120 * @param string $drop_ddl SQL statement to drop column. 121 * @return bool True on success or if the column doesn't exist. False on failure. 122 */ 123 function maybe_drop_column( $table_name, $column_name, $drop_ddl ) { 124 global $wpdb; 125 126 foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { 127 if ( $column === $column_name ) { 128 129 // Found it, so try to drop it. 130 $wpdb->query( $drop_ddl ); 131 132 // We cannot directly tell that whether this succeeded! 133 foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { 134 if ( $column === $column_name ) { 135 return false; 136 } 137 } 138 } 139 } 140 141 // Else didn't find it. 142 return true; 143 } 144 145 /** 146 * Checks that database table column matches the criteria. 147 * 148 * Uses the SQL DESC for retrieving the table info for the column. It will help 149 * understand the parameters, if you do more research on what column information 150 * is returned by the SQL statement. Pass in null to skip checking that 151 * criteria. 152 * 153 * Column names returned from DESC table are case sensitive and are listed: 154 * Field 155 * Type 156 * Null 157 * Key 158 * Default 159 * Extra 160 * 161 * @since 1.0.0 162 * 163 * @global wpdb $wpdb WordPress database abstraction object. 164 * 165 * @param string $table_name Database table name. 166 * @param string $col_name Table column name. 167 * @param string $col_type Table column type. 168 * @param bool $is_null Optional. Check is null. 169 * @param mixed $key Optional. Key info. 170 * @param mixed $default_value Optional. Default value. 171 * @param mixed $extra Optional. Extra value. 172 * @return bool True, if matches. False, if not matching. 173 */ 174 function check_column( $table_name, $col_name, $col_type, $is_null = null, $key = null, $default_value = null, $extra = null ) { 175 global $wpdb; 176 177 $diffs = 0; 178 $results = $wpdb->get_results( "DESC $table_name" ); 179 180 foreach ( $results as $row ) { 181 182 if ( $row->Field === $col_name ) { 183 184 // Got our column, check the params. 185 if ( ( null !== $col_type ) && ( $row->Type !== $col_type ) ) { 186 ++$diffs; 187 } 188 if ( ( null !== $is_null ) && ( $row->Null !== $is_null ) ) { 189 ++$diffs; 190 } 191 if ( ( null !== $key ) && ( $row->Key !== $key ) ) { 192 ++$diffs; 193 } 194 if ( ( null !== $default_value ) && ( $row->Default !== $default_value ) ) { 195 ++$diffs; 196 } 197 if ( ( null !== $extra ) && ( $row->Extra !== $extra ) ) { 198 ++$diffs; 199 } 200 201 if ( $diffs > 0 ) { 202 return false; 203 } 204 205 return true; 206 } // End if found our column. 207 } 208 209 return false; 210 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Nov 21 01:00:03 2024 | Cross-referenced by PHPXref 0.7.1 |