2013-11-28 2 views
-2

Я довольно новыми для PHP, и я после этой PHP academy tutorial on a register-login system.Преобразование из MySQL в MySQLi, как я могу передать соединение с MySQLi внутри функции?

В учебнике, он использует MySQL функции, как mysql_connect, mysql_query и mysql_real_escape_string т.д.

В соответствии с рекомендациями, я работаю в новом проекте и хотите использовать mysqli для выполнения той же системы входа пользователя. До сих пор у меня есть две функции, требующие подключения к базе данных. Ниже приведен пример моей функции дезинфицировать:

<?php 
include ('connect.php'); 

function sanitize($data){ 
    return mysqli_real_escape_string($data); 
} 
?> 

Когда я пытаюсь запустить это, я получаю сообщение об ошибке, как показано ниже:

Предупреждение: mysqli_real_escape_string() ожидает, ровно 2 параметров, 1 приведены

Итак, я могу добавить соединение к моей функции, как это:

<?php 
//include ('connect.php'); 

function sanitize($data){ 
$connection = mysqli_connect('localhost', 'root', 'password', 'array-test'); 
    return mysqli_real_escape_string($connection, $data); 
} 
?> 

Что работает успешно! Проблема в том, что вместо того, чтобы передавать мое соединение с базой данных из include, я должен поместить его в функцию вручную. У меня будет несколько функций с использованием подключения к базе данных, и если я повторяю это много, я должен делать что-то неправильно.

До сих пор единственным обходным решением, о котором я думал, является передача переменной соединения в аргументе при вызове функции. Вид, как показано ниже:

<?php 
include ('connect.php'); 

function sanitize($connection, $data){ 
    return mysqli_real_escape_string($connection, $data); 
} 
?> 

Я что-то не хватает? Как я могу избежать вручную добавлять переменную соединения для каждой создаваемой мной функции?

+0

Вы можете использовать 'global $ connection'. Но это означает, что вам всегда нужно использовать одно и то же имя переменной для вашего соединения. – Barmar

+0

Да, видимо. Вам не хватает функции поиска на этом сайте, где этот вопрос уже был задан уже десятки раз. –

+0

Не говоря уже о том, что ваша функция «санитария» неправильна и подвержена инъекции. –

ответ

-1

Вы можете использовать глобальную переменную.

function sanitize($data){ 
    global $connection; 
    return mysqli_real_escape_string($connection, $data); 
} 

Но лучше просто изменить код, чтобы передать соединение в качестве параметра. Это позволит вам использовать несколько соединений, если это необходимо.

+0

Такой функции никогда не должно быть. –

+0

Спасибо, я думаю, вот что я в итоге сделаю. Я ценю вашу помощь, тем более, что, похоже, другие пользователи больше заинтересованы в downvotes, чем помогают. – user3000310

Смежные вопросы