【发布时间】:2021-01-11 00:18:19
【问题描述】:
我有一个像这样创建的 2 列表(每个用户都有自己的表):
$sql = "CREATE TABLE $user_name (
driver TINYTEXT NOT NULL,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
我已经(手动,使用 phpMyAdmin)将数据插入到一个这样的表中。 reg_date 设置在当前时间,并插入了一些随机字符串(数字,比如 01234)。
我尝试访问这样的行:
$mysql_qry2 = "SELECT * FROM $username";
$result2 = mysqli_query($conn, $mysql_qry2);
$ans = "";
if(mysqli_num_rows($result2) > 0) {
while ($row = mysqli_fetch_assoc($result2)) {
$ans = $ans . $row["driver"];
$ans = $ans . " ";
$x = $row["driver"];
echo "$x";
echo "a";
}
$ans = $ans . "asd";
echo "$ans";
} else {
echo "b";
}
编辑:修复我错误的变量名称后,“SELECT *”查询返回零行,尽管有 3 行数据。
【问题讨论】:
-
您使用了错误的变量名。将 if(mysqli_num_rows($result) > 0) 更改为 if(mysqli_num_rows($result2) > 0)
-
谢谢!我修复了这个问题和回显问题,但问题是它在 num_rows 中显示 0 行,尽管有 3 行(我用 phpMyAdmin 检查它)
-
您的代码看起来可以正常工作。 phpize.online/… 请检查您在哪里设置
$username值 -
注意:object-oriented interface to
mysqli明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query接口混淆,因为缺少单个i会导致麻烦。示例:$db = new mysqli(…)和$db->prepare("…")过程接口是 PHP 4 时代的产物,不应在新代码中使用。此外,程序界面的错误检查和报告不那么严格,使调试工作受挫。 -
为每个用户创建一个表会给你带来一大堆问题。考虑创建一个包含
user_id列的表来区分数据。如有必要,这可以通过表分区进行优化。