es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Dividir las cadenas en un array para formar subconjuntos de tres elementos.

Estoy practicando con la base de datos AdventureWorks por ahora y recibiré cadenas como las siguientes: SalesOrderNumber=SOH123 y CustomerID=1. Las cadenas pueden no contener siempre =, ya que pueden ser >, <, >=, <=, !=, <>.

Idealmente, me gustaría dividir cada cadena en 3 campos: la columna de la base de datos para consultar, la comparación (por ejemplo, =, >, !=, etc.) y el valor a buscar.

Puedo lograr lo que quiero con mucho código, comparando carácter por carácter, pero espero que alguien pueda sugerir una forma realmente sencilla de hacer esto, ya que estoy seguro de que esta debe ser una tarea bastante común para los sitios web.

No quiero simplemente usar las cadenas tal como vienen, ya que necesito sanitizarlas primero. Tampoco quiero enviar consultas incorrectas a la base de datos que puedan generar errores de SQL.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para dividir cada cadena en 3 campos, puedes utilizar la función preg_split en PHP. Primero, debes sanitizar las entradas de cadena para prevenir ataques de inyección SQL. Luego, puedes usar expresiones regulares para dividir la cadena por el operador de comparación. Por ejemplo:

    $input = "SalesOrderNumber=SOH123";
    
    // Sanitizar entrada
    $input = mysqli_real_escape_string($link, $input);
    
    // Dividir cadena usando expresión regular
    $parts = preg_split('/(=|>=|<=|!=|<>|<|>)/', $input, -1, PREG_SPLIT_DELIM_CAPTURE);
    
    // Extraer valores
    $column = trim($parts[0]);
    $comparison = trim($parts[1]);
    $value = trim($parts[2]);
    

    Esto dividirá la cadena de entrada en un array de tres elementos, siendo el operador de comparación el segundo elemento. Luego puedes extraer las variables de columna, comparación y valor del array y utilizarlas en tu consulta SQL.

Comments are closed.