我正在刷我的 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