Question:
How to insert (write / save) data that contains commas in a database?
Answer:
There should be no problem when making the query with PDO whenever the parameters are good.
Example of construction and use
Prepare configuration constants for the database, in this case MySQL
define("DRIVER_SQL", "mysql");
define("DATABASE", "tu_base_de_Datos");
define("PORT", "3306");
define("HOSTNAME", "localhost");
define("USERNAME", "root");
define("PASSWORD", "1234");
define("URI", DRIVER_SQL . ":dbname=" . DATABASE . ";port=" . PORT . ";host=" . HOSTNAME);
Create class by applying a singleton pattern that returns an instance of PDO.
class DB
{
private static $pdo;
final private function __construct()
{
// Constructor vacío y privado.
}
function _destructor()
{
// Destructor que se encarga de cerrar la conexión y limpiar el puntero de PDO.
self::$pdo = null;
}
private static function connect()
{
try
{
if (self::$pdo != null) return self::$pdo;
self::$pdo = new PDO(URI, USERNAME, PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
self::$pdo->setAttribute(PDO::ATTR_PERSISTENT, true);
return self::$pdo;
}
catch (PDOException $e)
{
echo($e);
return false;
}
}
}
Add static methods to the class that use the PDO instance.
public static function insertUpdateDelete($sql, $parameters)
{
try
{
$rs = DB::connect()->prepare($sql);
$rs = $rs->execute($parameters);
return $rs != null && $rs != 0 ? true : false;
}
catch (PDOException $e)
{
print_r($e);
return null;
}
}
public static function select($sql, $parameters = null)
{
try
{
$rs = DB::connect()->prepare($sql);
$rs->execute($parameters);
return $rs->fetchAll(PDO::FETCH_ASSOC);
}
catch (PDOException $e)
{
print_r($e);
return null;
}
}
Use of the DB class created. The parameters are passed in an array.
include_once 'DB.php';
$query = "INSERT INTO tabla VALUES (?,?,?,?);";
$params = [ null, "STACK", "OVERFLOW", 8 ];
$rs = DB::insertUpdateDelete($query, $params);
echo $rs === true ? 'INSERT OK' : 'INSERT ERROR';
$query = "SELECT * FROM tabla WHERE age > ?;";
$params = [ 5 ];
$filas = DB::select($query, $params);
foreach ($filas as $fila) {
foreach($fila as $columna) {
// Hacer algo
}
}