mysql_real_escape_string() ne fonctionne pas, même si je suis connecté à la base de données
Je ne pense pas que mon code est le problème parce que c'est mon travail sur mon serveur local (EDIT: désolé si ce n'était pas le bon endroit pour demander, mais je ne peux pas passer à ServerFault par moi-même). Sur le serveur distant, mais, je ne peux pas obtenir mysql_real_escape_string()
de travail. La connexion de base de données est de travail, et je suis connecter avant d'appeler la fonction.
Quand j'essaie echo $_POST['email'];
, j'ai le droit de données, mais lorsque j'essaie echo mysql_real_escape_string($_POST['email']);
je ne reçois rien.
Voici ce que j'obtiens lorsque je quitte rapport d'erreur sur:
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: [2002] No such file or directory (trying to connect via unix://please_see_the_faq) in /f5/mysite/public/email_results.php on line 11
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: No such file or directory in /f5/mysite/public/email_results.php on line 11
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /f5/mysite/public/email_results.php on line 11
Est-il possible que quelque chose avec la configuration de PHP est la cause? Je suis d'hébergement avec NearlyFreeSpeech, si il le faut.
Voici mon insérez le code:
$db->query('INSERT INTO emails VALUES ("[email protected]")');
Et voici comment je me connecte à la base de données:
@ $db = new mysqli('mysite.db', 'wizard', '(password)', 'mysite');
- J'ai arrêté de lire après: "je sais que mon code n'est pas le problème".
- Avez-vous un lien vers la base de données qui est en train de travailler?
mysql_real_escape_string
implique un lien actif. À partir de votre troisième avertissement, il semble que ce n'est pas le cas. - OK. Est-il quelque part autre chose que je devrais demander à propos de problèmes de configuration?
- Je suis sûr que le lien vers la base de données est de travailler parce que je peux insérer sans échappement de données de l'amende juste.
- Considérant que vous avez une erreur qui dit: "Un lien vers le serveur n'a pas pu être établie", je ne pense pas que vous avez un lien qui est établi.
- Bon, on dirait des gens sont mécontents que cette question n'est pas sur le code. Aucun moyen de déplacer ce ServerFault?
- Hein. Je me demande pourquoi c'est de me laisser insérer des données si il n'y a pas de lien établi.
- Vous pouvez établir un lien après vous utilisez
mysql_real_escape_string
, mais avant de vous sont à insérer les données. - Je viens de déménager l'appel insérer au-dessus de la mysql_real_escape_string() de l'appel. L'insert est encore à travailler, mais mysql_real_escape_string() n'est pas encore.
Vous devez vous connecter pour publier un commentaire.
Vous voyez que la première erreur...l'un disant: "essayez de vous connecter via
unix://please_see_the_faq
"? Cela signifie que PHP est d'essayer de vous connecter à votre serveur MySQL (le même que viamysql_connect
sans params), mais il n'a pas le bon params pour vous connecter. Il ne sait même pas où la base de données socket est.Si vous n'êtes pas connecté à la base de données à l'aide de
mysql_connect
, alors vous ne devriez pas être à l'aide demysql_real_escape_string
. Si vous le faites, alors il va essayer de se connecter à la base de données sur son propre, en utilisant les params par défaut dans php.ini (dont les résultats, vous êtes en train de voir). On dirait que vous êtes à l'aide de mysqli, qui est une extension différente et a sa propre fonction d'échappement --mysqli_real_escape_string
. Utiliser à la place.Ou obtenir un indice et apprendre à utiliser les requêtes préparées, comme les dieux prévu.
mysql_real_escape_string
alors, il est destiné à être utilisé après unmysql_connect
(pasmysqli_connect
, pasnew PDO
, pas d'autres trucs), ou bien il s'vais essayer d'ouvrir la connexion sur son propre aide de la connexion par défaut paramètres en php.ini (qui sont presque certainement pas ce que vous voulez, et en fait ce qui est à l'origine de votre problème actuel).mysqli_real_escape_string
(ou encore mieux, des déclarations préparées à l'avance) à la place. Tous les mysql_* stuff est ancien, et à peine plus supportés, et doit être oublié.Je suppose que votre insérez le code (que vous cacher que cette Réserve Nationale) est à l'aide de tout autre pilote, pas la plaine mysql un.
Cela signifie que vous ne devriez pas utiliser
mysql_real_escape_string()
, mais certains pilotes spécifiques échapper/la fonction de liaison.