用于生成密码的PHP脚本[已关闭]

问题描述 投票:0回答:0

我正在刷我的 php 并尝试创建一个生成密码的网站。 我有一个名为 DATA 的数据库 在那里我有 3 个表,单词、特殊字符和数字 它们看起来像这样:

ID|WORD ID|SPECIALCHAR and ID,NUMBER

这就是我的 php 代码目前的样子:

<?php
function generatePassword($numWords, $numSpecialChars, $numNumbers, $conn, $formatOption) {
    $words = [];
    $sql = "SELECT WORD FROM WORDS ORDER BY RAND() LIMIT :numWords";
    try {
        $stmt = $conn->prepare($sql);
        $stmt->execute(array(:numWords, $numWords));
        $words = $stmt->fetch(PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        die("Error fetching words: " . $e->getMessage());
    }

    $specialChars = [];
    $sql = "SELECT SPECIALCHAR FROM SPECIALCHARS ORDER BY RAND() LIMIT :numSpecialChars";
    try {
        $stmt = $conn->prepare($sql);
        $stmt->execute(array(:numSpecialChars, $numSpecialChars));
        $specialChars = $stmt->fetch(PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        die("Error fetching special characters: " . $e->getMessage());
    }

    $numbers = [];
    $sql = "SELECT NUMBER FROM NUMBERS ORDER BY RAND() LIMIT :numNumbers";
    try {
        $stmt = $conn->prepare($sql);
        $stmt->execute(array(:numNumbers, $numNumbers));
        $numbers = $stmt->fetch(PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        die("Error fetching numbers: " . $e->getMessage());
    }


    $password = implode("", $words);
    if ($numSpecialChars > 0) {
        $password .= implode("", $specialChars);
    }
    if ($numNumbers > 0) {
        $password .= implode("", $numbers);
    }

    return $password;
}

$servername = "1.2.3.4.5";
$username = "dbuser";
$password = "dbpass";
$dbname = "DATA";


try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // Set PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}

$numWords = 3;
$numSpecialChars = 2;
$numNumbers = 2;
$formatOption = "between_words";

$password = generatePassword($numWords, $numSpecialChars, $numNumbers, $conn, $formatOption);

echo "Generated Password: " . $password;
?>

自从我用 php 和 SQL 做任何事情以来,我已经生锈了很长时间,但我无法真正弄清楚这个,我得到了这个错误:

Error fetching words: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''3'' at line 1

php mysql pdo mariadb
© www.soinside.com 2019 - 2024. All rights reserved.