Lo primero, la seguridad no siempre tiene que ver con el programador para comprobarlo busca hacerca del Prepared statements de mysqli.
Con respecto a lo segundo, como dices, en el fondo es sql pero hay librerias que no lo aprovechan al maximo, como dicen por ahi, que no saben sacarle todo el jugo.
Por ultimo, lo de hacer tus propias funciones si tiene que ver, esa es una ventaja que nos trae no sólo mysqli sino POO en general, leete un poco sobre heredar de poo.
Acabo de leer acerca de "Prepared statements" y tan solo dicen que es más seguro frente a SQL Injection, si tu lo programas bien, no te podrían hacer SQLi, por lo que claramente, no me parece un buen motivo.
¿Qué es lo que se puede hacer frente a una DDBB MySQL?
-------------------
Crear db (CREATE)
Crear tabla (CREATE)
Eliminar db (DROP)
Eliminar tabla (DROP)
Alterar la tabla (ALTER)
Limpiarla (TRUNCATE)
Insertar fila (INSERT)
Eliminar fila (DELETE)
Actualizar/Editar fila (SET)
...
Eso en base a SQL.
Funciones de la libreria MySQL:
o mysql_affected_rows — Obtiene el número de filas afectadas en la anterior operación de MySQL
o mysql_client_encoding — Devuelve el nombre de la colección de caracteres
o mysql_close — Cierra la conexión de MySQL
o mysql_connect — Abre una conexión al servidor MySQL
o mysql_create_db — Crea una base de datos MySQL
o mysql_data_seek — Mueve el apuntador interno del resultado
o mysql_db_name — Obtiene los datos del resultado
o mysql_db_query — Envía una consulta MySQL
o mysql_drop_db — Omite (elimina) una base de datos MySQL
o mysql_errno — Devuelve un mensaje de error con un valor numérico de la operación anterior con MySQL
o mysql_error — Devuelve el texto con error del mensaje de la anterior operación MySQL
o mysql_escape_string — Escapes a string for use in a mysql_query
o mysql_fetch_array — Fetch a result row as an associative array, a numeric array, or both
o mysql_fetch_assoc — Recupera una fila de resultado como un array asociativo
o mysql_fetch_field — Get column information from a result and return as an object
o mysql_fetch_lengths — Get the length of each output in a result
o mysql_fetch_object — Fetch a result row as an object
o mysql_fetch_row — Get a result row as an enumerated array
o mysql_field_flags — Get the flags associated with the specified field in a result
o mysql_field_len — Returns the length of the specified field
o mysql_field_name — Get the name of the specified field in a result
o mysql_field_seek — Set result pointer to a specified field offset
o mysql_field_table — Get name of the table the specified field is in
o mysql_field_type — Get the type of the specified field in a result
o mysql_free_result — Free result memory
o mysql_get_client_info — Obtener información del cliente MySQL
o mysql_get_host_info — Obtener información de la máquina anfitriona MySQL
o mysql_get_proto_info — Obtener información del protocolo MySQL
o mysql_get_server_info — Obtener información del servidor MySQL
o mysql_info — Obtiene información sobre la consulta más reciente
o mysql_insert_id — Get the ID generated in the last query
o mysql_list_dbs — List databases available on a MySQL server
o mysql_list_fields — List MySQL table fields
o mysql_list_processes — Lista los procesos MySQL
o mysql_list_tables — Lista las tablas de una base de datos MySQL
o mysql_num_fields — Get number of fields in result
o mysql_num_rows — Get number of rows in result
o mysql_pconnect — Open a persistent connection to a MySQL server
o mysql_ping — Efectuar un chequeo de respuesta (ping) sobre una conexión de servidor o reconectarse si no hay conexión
o mysql_query — Send a MySQL query
o mysql_real_escape_string — Escapes special characters in a string for use in an SQL statement
o mysql_result — Get result data
o mysql_select_db — Select a MySQL database
o mysql_set_charset — Sets the client character set
o mysql_stat — Obtiene el status actual del sistema
o mysql_tablename — Get table name of field
o mysql_thread_id — Devuelve el ID del hilo actual
o mysql_unbuffered_query — Envía una consulta SQL a MySQL, sin recuperar ni colocar en búfer las filas de resultado
[ sacado de php.net #
http://es2.php.net/manual/es/book.mysql.php ]
Aparte de poder hacer todo por el query, ya vienen funciones predefinidas en la librería para cambiar lo que quieras de la base de datos.
Funciones MySQLi
* mysqli->affected_rows — Gets the number of affected rows in a previous MySQL operation
* mysqli::autocommit — Turns on or off auto-commiting database modifications
* mysqli::change_user — Changes the user of the specified database connection
* mysqli::character_set_name — Returns the default character set for the database connection
* mysqli->client_info — Returns the MySQL client version as a string
* mysqli->client_version — Get MySQL client info
* mysqli::close — Closes a previously o*****d database connection
* mysqli::commit — Commits the current transaction
* mysqli->connect_errno — Returns the error code from last connect call
* mysqli->connect_error — Returns a string description of the last connect error
* mysqli::__construct — Open a new connection to the MySQL server
* mysqli::debug — Performs debugging operations
* mysqli::dump_debug_info — Dump debugging information into the log
* mysqli->errno — Returns the error code for the most recent function call
* mysqli->error — Returns a string description of the last error
* mysqli->field_count — Returns the number of columns for the most recent query
* mysqli::get_charset — Returns a character set object
* mysqli->get_client_info — Returns the MySQL client version as a string
* mysqli->client_version — Get MySQL client info
* mysqli::get_connection_stats — Returns statistics about the client connection
* mysqli->host_info — Returns a string representing the type of connection used
* mysqli->protocol_version — Returns the version of the MySQL protocol used
* mysqli->server_info — Returns the version of the MySQL server
* mysqli->server_version — Returns the version of the MySQL server as an integer
* mysqli::get_warnings — Get result of SHOW WARNINGS
* mysqli->info — Retrieves information about the most recently executed query
* mysqli::init — Initializes MySQLi and returns a resource for use with mysqli_real_connect()
* mysqli->insert_id — Returns the auto generated id used in the last query
* mysqli::kill — Asks the server to kill a MySQL thread
* mysqli::more_results — Check if there are any more query results from a multi query
* mysqli::multi_query — Performs a query on the database
* mysqli::next_result — Prepare next result from multi_query
* mysqli::options — Set options
* mysqli::ping — Pings a server connection, or tries to reconnect if the connection has gone down
* mysqli::poll — Poll connections
* mysqli::prepare — Prepare an SQL statement for execution
* mysqli::query — Performs a query on the database
* mysqli::real_connect — Opens a connection to a mysql server
* mysqli::real_escape_string — Escapes special characters in a string for use in an SQL statement, taking into account the current charset of the connection
* mysqli::real_query — Execute an SQL query
* mysqli::reap_async_query — Get result from async query
* mysqli::rollback — Rolls back current transaction
* mysqli::select_db — Selects the default database for database queries
* mysqli::set_charset — Sets the default client character set
* mysqli::set_local_infile_default — Unsets user defined handler for load local infile command
* mysqli::set_local_infile_handler — Set callback function for LOAD DATA LOCAL INFILE command
* mysqli->sqlstate — Returns the SQLSTATE error from previous MySQL operation
* mysqli::ssl_set — Used for establishing secure connections using SSL
* mysqli::stat — Gets the current system status
* mysqli::stmt_init — Initializes a statement and returns an object for use with mysqli_stmt_prepare
* mysqli::store_result — Transfers a result set from the last query
* mysqli->thread_id — Returns the thread ID for the current connection
* mysqli::thread_safe — Returns whether thread safety is given or not
* mysqli::use_result — Initiate a result set retrieval
* mysqli->warning_count — Returns the number of warnings from the last query for the given link
[ sacado tambien de php.net #
http://es2.php.net/manual/es/book.mysqli.php ]
Básicamente las mismas funciones, sí MySQLi tiene más, pero porque necesita más... porque para mostrar un error de conexión necesita
mysqli->connect_errno()(numero) o
mysqli->connect_error()(nombre del error).
Cosas que con 'mysql_' tan solo te haría falta
mysql_error().
Para mí la simple diferencia entre una y otro esque una es una librería a funciones y la otra es una librería a clases.
Y por ultimo... claro que es la ventaja de POO pero entonces ahora hablamos de POO... no de MySQLi... porque a que con POO se puede usar también la librería mysql?
Por supuesto !
¿Entonces?
Ahí está la cosa que como ya he dicho la diferencia entre MySQL y MySQLi es el simple hecho de función o clase ?
Cuestión de gustos ! jejej
Un abrazo
