Parece que ha entendido mal algunas sintaxis básicas de PHP.
como se menciona en the manual:
Caracteres dentro string s se puede acceder y modificar mediante la especificación de la base cero-offset del carácter deseado después de la string usando cuadrado array soportes, como en $str[42]
. Piense en un string como array de caracteres para este propósito. Las funciones substr()
y substr_replace()
se pueden usar cuando desee extraer o reemplazar más de 1 carácter.
Nota:String s también pueden ser accedidas usando llaves, como en $str{42}
, para el mismo propósito.
lo tanto, su uso de llaves en todo el código (a excepción de las que definen el alcance de la estructura de control for
) son totalmente errónea y no lograr lo que se propone.
En segundo lugar, de su código parece que está almacenando datos relacionales en objetos PHP serializados; esto frustra muchos de los beneficios de usar un RDBMS como MySQL. A menos que tenga razones convincentes para hacer lo contrario, probablemente debería almacenar sus objetos PHP en un formulario normalised. Por ejemplo, en lugar de cada registro description
con un campo Name
que contiene un objeto PHP serializado cuyas propiedades son matrices que contienen cadenas imploded de nombres, simplemente almacene cada uno de esos nombres en una nueva tabla descriptionNames
que haga referencia al registro relacionado en la tabla description
:
CREATE TABLE descriptionNames (
descriptionID INT NOT NULL,
name VARCHAR(50),
PRIMARY KEY (descriptionId, name),
FOREIGN KEY (descriptionId) REFERENCES description (descriptionId)
);
también parece que usted tiene cinco (esquemáticamente) tablas idénticas nombrados Table ID=1
, Table ID=2
, etc.?Si es así, debe probablemente combine sus cinco tablas en una, con una columna (si así lo desea) para indicar de qué tabla se originó el registro; También te sugiero que cambies los nombres de tu tabla para evitar el uso de caracteres especiales como el espacio en blanco y =
, ya que es probable que solo causen problemas y confusión en el futuro si olvidas citarlos correctamente. Por ejemplo:
ALTER TABLE `Table ID=1`
RENAME TO CombiTable,
ADD COLUMN FromTableID TINYINT NOT NULL;
UPDATE CombiTable SET FromTableID = 1;
INSERT INTO CombiTable
SELECT *, 2 FROM `Table ID=2` UNION ALL
SELECT *, 3 FROM `Table ID=3` UNION ALL
SELECT *, 4 FROM `Table ID=4` UNION ALL
SELECT *, 5 FROM `Table ID=5`;
SELECT * FROM CombiTable; -- check everything is okay
DROP TABLE `Table ID=2`, `Table ID=3`, `Table ID=4`, `Table ID=5`;
En cualquier caso, no debe utilizar los antiguos mysql_*
funciones. Ya no se mantienen y la comunidad ha comenzado el deprecation process. En su lugar, debe aprender acerca de prepared statements y utilizar la capa de abstracción PDO o la extensión mejorada MySQLi.
Si usted necesita para mantener su estructura de datos existente, con DOP se podía hacer algo como:
$dbh = new PDO("mysql:dbname=$dbname;charset=utf8", $user, $password);
$qry = $dbh->query("SELECT Name FROM description");
$myarray = array();
while ($reihe = $dbh->fetchColumn())
foreach (unserialize($reihe) as $h)
foreach ($h as $m)
array_merge($myarray, preg_split("/\s+/", $m, -1, PREG_SPLIT_NO_EMPTY));
for ($k = 1; $k <= 5; $k++) {
$qry = $dbh->prepare("SELECT * FROM `table ID=$k` WHERE " . implode(" OR ",
array_pad(array(), count($myarray), "name LIKE CONCAT('%', ?, '%')")
));
$qry->execute($myarray);
while($row = $qry->fetch()) {
echo "data1:$row[data1]<br/>";
echo "data2:$row[data2]<br/>";
}
}
Sin embargo, el uso de mi nueva estructura de datos propuesta, que sería sólo necesita hacer:
$dbh = new PDO("mysql:dbname=$dbname;charset=utf8", $user, $password);
$qry = $dbh->query("
SELECT *
FROM CombiTable JOIN descriptionNames USING (name)
WHERE FromTableID BETWEEN 1 AND 5 -- in case you have others?
ORDER BY FromTableID
");
while ($row = $qry->fetch()) {
echo "data1:$row[data1]<br/>";
echo "data2:$row[data2]<br/>";
}
Podría considerar rediseñar su código para usar la palabra clave "LIMIT" de MySQL como contador de iteraciones. – Avyakt