Conversión a MSSQL?

Hola,

Tengo un código PHP5 (alojado en Free) que debo convertir a PHP8, porque ya no funciona. Comienzo por el código de conexión a la base de datos:

$link = mysql_connect ($host,$user,$pass) or die (); mysql_select_db($db);

da:

$link = mysqli_connect($host, $user, $pass, $db); // Verificación de la conexión if (!$link) { die("Échec de la connexion : " . mysqli_connect_error()); }

Tengo el error:

Fatal error: Call to undefined function: mysqli_connect()

¿Por qué ?? Y cómo solucionarlo?

  • Gracias

15 respuestas

  • Votos
  • Fecha
  • Fecha descendente
  1. Después de mi intento de pasar a php8 (mysql con mysqli), quise regresar atrás. Como no había cambiado gran cosa, no mucho trabajo.

    Pero ahora, ya no se muestra nada de mi base, ¡incluso en la página de inicio!??? ¿Qué pasa con el HTML .............. En esta página, pongo un pequeño texto de presentación, y luego muestro el número de individuos por nombre que tengo en mi base ...........

    Aquí está mi código de conexión a la bd:

    <?php // información para la conexión a la BD $host = 'sql.free.fr'; $host = 'sql.free.fr'; $user = 'genfamille'; $pass = '......'; $db = 'genfamille'; $link = mysql_connect ($host,$user,$pass) or die (); mysql_select_db($db); ?>

    Mi página de inicio :

    <center><br><br> Este sitio presenta una genealogía de las ramas <b>HUMBERT, DAMERON ,DAQUIN</b> y <b>MALFOI</b> <br>Por motivos de confidencialidad, sólo se presentarán los años de nacimiento < año actual - 110.<p> El nombre <b>DAQUIN</b> estaba escrito <b>DACQUIN</b> o <b>D'ACQUIN</b> hasta mediados del siglo XVIII.<br> El nombre <b>MALFOI</b> estaba escrito <b>MALFOY</b> hasta mediados del siglo XIX. <BR><BR><BR> Esta genealogía se compone de : <?php include ('connexion/connexion.php'); //$host = 'localhost'; //$user = 'root'; //$pass = ''; //$db = 'gen_famille'; //$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); //mysql_select_db($db) or die ('Erreur :'.mysql_error()); $date = date("Y"); $date2 = $date-110; $query = 'SELECT count(id) FROM individus WHERE (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; $result = mysql_query($query) or die (mysql_error()); $resultat=mysql_fetch_row($result); echo "$resultat[0] individus<p>dont<br>"; $query2 = 'SELECT count(id), MIN(RIGHT(date_naissance, 4)) AS date FROM individus WHERE famille LIKE "%HUMBERT%" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; $result2 = mysql_query($query2) or die (mysql_error()); $resultat2=mysql_fetch_row($result2); $row2 = mysql_fetch_array($result2); echo "$resultat2[0] individus dans la branche HUMBERT<br>"; echo ''.$row2['date'].''; $query3 = 'SELECT count(id) from individus WHERE famille LIKE "%DAMERON%" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; $result3 = mysql_query($query3) or die (mysql_error()); $resultat3=mysql_fetch_row($result3); echo "$resultat3[0] individus dans la branche DAMERON<br>"; $query4 = 'SELECT count(id) from individus WHERE famille LIKE "%DAQUIN%" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; $result4 = mysql_query($query4) or die (mysql_error()); $resultat4=mysql_fetch_row($result4); echo "$resultat4[0] individus dans la branche DAQUIN<br>"; $query5 = 'SELECT count(id) from individus WHERE famille LIKE "%MALFOI%" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; $result5 = mysql_query($query5) or die (mysql_error()); $resultat5=mysql_fetch_row($result5); echo "$resultat5[0] individus dans la branche MALFOI<br>"; ?> Ella a été préparée et éditée par : <p>Thierry HUMBERT&nbsp;&nbsp; <br> N'hésitez pas à me contacter ..... <div class="contact-img"><a href="contact.htm" target="cadre2"><img src="images/lettre.ico" border="0" width="42"></a></div> <p></p> Retrouvez l'ensemble des données à l'aide des menus situés dans la barre du haut.<p> <font size=1>Localité de FLEZ-CUZY (58), pas d’acte disponible en ligne de 1693 à 1698, 1700, et 1711 à 1738.</font> <BR><BR> </center>

    J'ai aussi une sauvegarde de mes scripts à la maison. J'ai essayé de les remettre en place, mais rien !? Cela peut-il venir du serveur de Free ???

    1. Moderador

      Hola,

      ¿Has verificado la versión de PHP activa en tu sitio?

      En uno de los míos estoy con PHP Versión 5.6.40, no 8.5 así que depende de los servidores. Y también del .htaccess donde en Free se puede seleccionar la versión elegida.

      En el .htaccess tengo un parámetro antiguo
      # Activar el php5 en free.fr (php4 por defecto)
      php 5

      En un sitio sin el .htaccess estoy en PHP Versión 4.4.3-dev. Y he intentado poner php 8, sigo en 5.

      Para mostrar la versión crea un archivo como info.php conteniendo <?php phpinfo(); ?> y ejecútalo manualmente.

      Las migraciones quizás están en curso. Free siempre ha sido muy malo en la comunicación. Tengo 2 sitios más accesibles, ni por FTP ni con un navegador.


      1. La versión en PHP de mi sitio en Free 4.4.3.

        Pero supongo que el problema viene de Free. Probé mi sitio en otro hosting, ¡funciona !!!

        1. Moderador

          Volvemos a las preguntas iniciales. ¿El documento está depositado físicamente en tu sitio? Si es así, ¿cuál es el error en la orden SQL?


          1. No. The document is not saved on the site, and no error is reported!

            And now nothing else displays except the HTML. Even the links no longer work!

            1. Tengo el error:

              Error fatal: No se puede instanciar una clase inexistente: mysqli en /var/www/sdb/b/a/genfamille/test_bd.php en la línea 6

              La línea 6 corresponde a

              $db_con = new mysqli("$host","$user","$pass","$db");

              Si entiendo bien, es que ¡mysqli no está activado!

              1. Moderador

                en php 4 esto no debe ser mysqli, incluso el método de acceso PDO solo funciona con php 5

                aquí hay una prueba realizada en php 4

                <?php // 1. Definición de las variables de conexión $serveur = "sql.free.fr"; $utilisateur = "xxxxx"; // Identifiant de votre compte Free (ex: monpseudo) $mot_de_passe = "yyyy"; // Votre mot de passe de base de données $base_de_donnees = "xxxx"; // Chez Free, le nom de la BDD est identique à l'identifiant // 2. Connexion au serveur MySQL $connexion = mysql_connect($serveur, $utilisateur, $mot_de_passe); // Vérification de la connexion if (!$connexion) { die("Echec de la connexion au serveur MySQL. Code erreur : " . mysql_errno() . " - Message : " . mysql_error()); } // 3. Sélection de la base de données $selection_base = mysql_select_db($base_de_donnees, $connexion); // Vérification de la sélection de la base if (!$selection_base) { die("Impossible de selectionner la base de donnees. Code erreur : " . mysql_errno() . " - Message : " . mysql_error()); } echo "Connexion reussie a la base de donnees Free !"; // 4. Test d'une requête SQL $sql = "SELECT * FROM article"; $result = mysql_query($sql, $connexion); if (!$result) { // La requete a échoue, on affiche l'erreur MySQL die('Erreur de requete SQL : ' . mysql_error()); } else { // Traitement des données si tout va bien while ($row = mysql_fetch_assoc($result)) { echo $row['nom'] . '<br />'; } } // 5. Fermeture de la connexion (optionnel en fin de script) mysql_close($connexion); ?> 

                on peut générer une erreur, qui en sql est très claire, remplacer le nom de la table article par une table inexistante.

            2. Gracias pee. He probado tu código y tengo el siguiente retorno:

              Fracaso de la conexión al servidor MySQL. Código de error: - Mensaje:

              1. Moderador

                He realizado pruebas porque tu mensaje no contiene un mensaje de error, mientras que debería.

                Si pongo una contraseña incorrecta en PHP4 obtengo un error:
                Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'mon_site'@'172.20.244.169' (using password: YES) in /var/www/sda/3/8/mon_site/accbddv4.php on line 9
                Fallo de la conexión al servidor MySQL. Código de error: 1045 - Mensaje: Access denied for user 'mon_site'@'172.20.244.169' (using password: YES)

                De forma singular, los 3 demás parámetros parecen no servir para nada, no causa error y me conecto, la URL del sitio debe ser suficiente, con una contraseña correcta, ya que me conecto con la siguiente configuración:

                $serveur = "ccm";
                $utilisateur = "ccm"; // Identifiant de votre compte Free (ex: monpseudo)
                $mot_de_passe = "YYYYY"; // Votre mot de passe de base de données
                $base_de_donnees = "ccm"; // Chez Free, le nom de la BDD est identique à l'identifiant

                ¿Tienes un problema de acceso a la BDD. ¿Tienes acceso a través de phpadmin en free.fr?

                Desde junio hay ahora un nuevo kernel de BDD en Free, MariaDB. No he encontrado dónde se puede solicitar la migración, pero ¿tras tus problemas no habrás hecho esa solicitud de migración para la BDD?

                También leí que, durante trabajos en los servidores y bases de datos, Free se dio cuenta de que algunos usuarios excedían los límites de tamaño permitidos, ¿lo que podría provocar bloqueos?


                1. Gracias, Jee Pee!

                  Sí, tengo acceso a mi base a través de phpMyAdmin.

                  Y para las cuentas gratuitas, Free no quiere intervenir...

                  1. No es necesario activar mysqli. Basta con pasar de la versión 5.0 a la versión 8.0 de PHP. Los comandos mysqli funcionarán automáticamente.

                    1. Sí, pero hace falta volver a tomar todos los códigos, uno por uno, línea por línea para modificarlos...

                      1. Moderador

                        ¿Tu base de datos sigue sin funcionar en Free con PHP4?

                        ¿Podrías simplemente activar PHP 8.5 en el .htaccess y probar el código del <9> para ver si es mejor en mysqli?

                      2. @jee pee

                        ¡Sí! Siempre en PHP4.

                        ¿Cómo activar PHP8.5 en el htaccess y probar el código del <9> para ver si es mejor en mysqli?

                    2. Prueba esto

                      $db_con = new mysqli("localhost","my_user","my_password","my_db"); // Verificar conexión if ($db_con -> connect_errno) { echo "Falló: " . $db_con -> connect_error; exit(); }