not - saber si existe un registro en mysql php
Cómo comprobar si existe la base de datos mysql (17)
Aquí hay una función de bash para verificar si existe una base de datos:
function does_db_exist {
local db="${1}"
local output=$(mysql -s -N -e "SELECT schema_name FROM information_schema.schemata WHERE schema_name = ''${db}''" information_schema)
if [[ -z "${output}" ]]; then
return 1 # does not exist
else
return 0 # exists
fi
}
Otra alternativa es simplemente tratar de usar la base de datos. Tenga en cuenta que esto también comprueba el permiso:
if mysql "${db}" >/dev/null 2>&1 </dev/null
then
echo "${db} exists (and I have permission to access it)"
else
echo "${db} does not exist (or I do not have permission to access it)"
fi
¿Es posible verificar si existe una base de datos (MySQL) después de haber realizado una conexión?
Sé cómo verificar si existe una tabla en una base de datos, pero necesito verificar si existe la base de datos. Si no es así, tengo que llamar a otro fragmento de código para crearlo y completarlo.
Sé que todo esto suena un tanto poco elegante: esta es una aplicación rápida y sucia.
Código de carriles:
ruby-1.9.2-p290 :099 > ActiveRecord::Base.connection.execute("USE INFORMATION_SCHEMA")
ruby-1.9.2-p290 :099 > ActiveRecord::Base.connection.execute("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ''entos_development''").to_a
SQL (0.2ms) SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ''entos_development''
=> [["entos_development"]]
ruby-1.9.2-p290 :100 > ActiveRecord::Base.connection.execute("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ''entos_development1''").to_a
SQL (0.3ms) SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ''entos_development1''
=> []
=> existe el desarrollo de entos, no existe entos_development1
Con este Script puede obtener Sí o No existe la base de datos, en caso de que no exista, no arroja Excepción.
SELECT
IF(EXISTS( SELECT
SCHEMA_NAME
FROM
INFORMATION_SCHEMA.SCHEMATA
WHERE
SCHEMA_NAME = ''DbName''),
''Yes'',
''No'') as exist
De la cáscara como bash
if [[ ! -z "`mysql -qfsBe "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=''db''" 2>&1`" ]];
then
echo "DATABASE ALREADY EXISTS"
else
echo "DATABASE DOES NOT EXIST"
fi
De largo recorrido y enrevesado (¡pero tenga paciencia conmigo!), Aquí hay un sistema de clase que hice para verificar si existe un DB y también para crear las tablas necesarias:
<?php
class Table
{
public static function Script()
{
return "
CREATE TABLE IF NOT EXISTS `users` ( `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT );
";
}
}
class Install
{
#region Private constructor
private static $link;
private function __construct()
{
static::$link = new mysqli();
static::$link->real_connect("localhost", "username", "password");
}
#endregion
#region Instantiator
private static $instance;
public static function Instance()
{
static::$instance = (null === static::$instance ? new self() : static::$instance);
return static::$instance;
}
#endregion
#region Start Install
private static $installed;
public function Start()
{
var_dump(static::$installed);
if (!static::$installed)
{
if (!static::$link->select_db("en"))
{
static::$link->query("CREATE DATABASE `en`;")? $die = false: $die = true;
if ($die)
return false;
static::$link->select_db("en");
}
else
{
static::$link->select_db("en");
}
return static::$installed = static::DatabaseMade();
}
else
{
return static::$installed;
}
}
#endregion
#region Table creator
private static function CreateTables()
{
$tablescript = Table::Script();
return static::$link->multi_query($tablescript) ? true : false;
}
#endregion
private static function DatabaseMade()
{
$created = static::CreateTables();
if ($created)
{
static::$installed = true;
}
else
{
static::$installed = false;
}
return $created;
}
}
En esto, puede reemplazar el nombre de la base de datos con el nombre de la base de datos que desee y también cambiar el script del creador a cualquier cosa y (¡con suerte!) No lo romperá. Si alguien puede mejorar esto, hágamelo saber!
Nota
Si no usa Visual Studio con herramientas PHP, no se preocupe por las regiones, son para el plegado de código: P
Estoy usando simplemente la siguiente consulta:
"USE ''DBname''"
A continuación, compruebe si el resultado es FALSO. De lo contrario, podría haber un error de acceso denegado, pero no puedo saberlo. Entonces, en el caso de privilegios involucrados, uno puede usar:
"SHOW DATABASES LIKE ''DBname''"
como ya se mencionó anteriormente.
La siguiente solución funcionó para mí:
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} /
-s -N -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=''${MYSQL_DATABASE}''"
Otra mejor manera de verificar si existe un dabtabse es:
$mysql = mysql_connect("<your host>", "root", "");
if(mysql_select_db(''<your db name>'', $mysql)){
echo "databse exists";
}else{
echo "Databse does not exists";
}
Ese es el método que siempre uso para verificar si la base de datos existe ...
echo "rate if you enjoy :)";
Para aquellos que usan php con mysqli, esta es mi solución. Sé que la respuesta ya ha sido respondida, pero pensé que sería útil tener la respuesta como una declaración preparada de mysqli también.
$db = new mysqli(''localhost'',username,password);
$database="somedatabase";
$query="SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=?";
$stmt = $db->prepare($query);
$stmt->bind_param(''s'',$database);
$stmt->execute();
$stmt->bind_result($data);
if($stmt->fetch())
{
echo "Database exists.";
}
else
{
echo"Database does not exist!!!";
}
$stmt->close();
Si está buscando un script php vea más abajo.
$link = mysql_connect(''localhost'', ''mysql_user'', ''mysql_password'');
if (!$link) {
die(''Not connected : '' . mysql_error());
}
// make foo the current db
$db_selected = mysql_select_db(''foo'', $link);
if (!$db_selected) {
die (''Cannot use foo : '' . mysql_error());
}
Un BASH-one-liner muy simple:
mysqlshow | grep dbname
Una forma sencilla de comprobar si existe una base de datos es:
SHOW DATABASES LIKE ''dbname'';
Si la base de datos con el nombre ''dbname'' no existe, obtendrás un conjunto vacío. Si existe, obtienes una fila.
Utilizando bash:
if [ "`mysql -u''USER'' -p''PASSWORD'' -se''USE $DATABASE_NAME;'' 2>&1`" == "" ]; then
echo $DATABASE_NAME exist
else
echo $DATABASE_NAME doesn''t exist
fi
CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;
IF EXISTS (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = N''YourDatabaseName'')
BEGIN
-- Database exists, so do your stuff here.
END
Si está utilizando MSSQL en lugar de MySQL, vea esta respuesta en un hilo similar .
SELECT IF(''database_name'' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ''DBName''
Si solo necesita saber si existe una db para no recibir un error cuando intente crearla, simplemente use (desde here ):
CREATE DATABASE IF NOT EXISTS DBName;