WordPress Version: 6.2
/**
* Checks that database table column matches the criteria.
*
* Uses the SQL DESC for retrieving the table info for the column. It will help
* understand the parameters, if you do more research on what column information
* is returned by the SQL statement. Pass in null to skip checking that criteria.
*
* Column names returned from DESC table are case sensitive and are as listed:
*
* - Field
* - Type
* - Null
* - Key
* - Default
* - Extra
*
* @since 1.0.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param string $table_name Database table name.
* @param string $col_name Table column name.
* @param string $col_type Table column type.
* @param bool $is_null Optional. Check is null.
* @param mixed $key Optional. Key info.
* @param mixed $default_value Optional. Default value.
* @param mixed $extra Optional. Extra value.
* @return bool True, if matches. False, if not matching.
*/
function check_column($table_name, $col_name, $col_type, $is_null = null, $key = null, $default_value = null, $extra = null)
{
global $wpdb;
$diffs = 0;
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names.
$results = $wpdb->get_results("DESC {$table_name}");
foreach ($results as $row) {
if ($row->Field === $col_name) {
// Got our column, check the params.
if (null !== $col_type && $row->Type !== $col_type) {
++$diffs;
}
if (null !== $is_null && $row->Null !== $is_null) {
++$diffs;
}
if (null !== $key && $row->Key !== $key) {
++$diffs;
}
if (null !== $default_value && $row->Default !== $default_value) {
++$diffs;
}
if (null !== $extra && $row->Extra !== $extra) {
++$diffs;
}
if ($diffs > 0) {
return false;
}
return true;
}
// End if found our column.
}
return false;
}