Это для школьного проекта. Я новичок в PHP и MySQL. Я пытаюсь написать функцию в PHP с одним строковым параметром, который станет именем столбца SQL-запроса, который используется в выражении prepare() внутри этой функции.Использовать параметр php как имя столбца в SQL-запросе
Вот код:
function checkCredentials($dbFieldToCheck) {
$statement = $conn->prepare("SELECT id FROM user WHERE ".$dbFieldToCheck." = ? AND password = PASSWORD(?)");
if (!$statement) die("Prepare failed: (" . $conn->errno . ") " . $conn->error);
$statement->bind_param("ss", $_POST["username/email"], $_POST["password"]);
$statement->execute();
$result = $statement->get_result();
$row = $result->fetch_assoc();
return $row;
}
Тогда я вызываю эту функцию дважды в двух различных переменных:
$row1 = checkCredentials('email');
$row2 = checkCredentials('username');
Наконец-то я что-то сделать с этими двумя переменными (не полезно здесь, я думаю).
Я пробовал разные способы записи параметра в инструкции SQL и другие способы записи его в вызов функции. Теперь я даже начинаю думать, что моя функция даже не называется вообще ...
Что я хочу достичь, если я просто выполняю код внутри функции два раза с именем столбца, жестко закодированным. Но это не приятно :)
Любая помощь очень ценится. Благодаря!
Начните с проверки значения '$ conn' в вашей функции. –
Возможно, вы указали '$ conn' вне вашей функции. Вы можете использовать 'global $ conn' для вызова переменной внутри вашей функции. –
** Никогда не храните простые текстовые пароли! ** Для обеспечения безопасности паролей используйте встроенные функции PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html). Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). Убедитесь, что вы [не избегаете паролей] (http://stackoverflow.com/q/36628418/1011527) или используйте какой-либо другой механизм очистки для них перед хэшированием. Выполнение этого * изменяет * пароль и вызывает ненужное дополнительное кодирование. –