在PHP上使用相同的变量名可以吗?

在PHP上使用相同的变量名可以吗?,php,mysqli,Php,Mysqli,我只是想知道我是否可以使用以下代码: $query = mysqli_query($db, "SELECT * FROM myTable1") while($result = mysqli_fetch_assoc($query)){ $temp = $result['id']; } 然后我取另一张像这样的桌子: $query = mysqli_query($db, "SELECT * FROM myTable2") while($result = mysqli_fetch_assoc

我只是想知道我是否可以使用以下代码:

$query = mysqli_query($db, "SELECT * FROM myTable1")

while($result = mysqli_fetch_assoc($query)){
   $temp = $result['id'];
}
然后我取另一张像这样的桌子:

$query = mysqli_query($db, "SELECT * FROM myTable2")

while($result = mysqli_fetch_assoc($query)){
   $temp = $result['id'];
}
我使用相同的变量
$result
$temp

我的意思是使用这样的代码可以吗?我是否应该以不同的方式命名变量,如
$result1
$result2
等等?
比如说,在使用相同的变量名还是给变量不同的名称之间,哪一个更好、更安全?
我希望有人能解释一下。

之前谢谢您。

如果您完成了myTable1,那么它是完全可以的,但是如果您打算在代码中的其他地方使用它,则不会,因为只有myTable2信息将保存在$result中,如果您遵循此原则,尤其是希望您将功能隔离到不同的功能中

如果你应用了这个,那么你就不会真正使用相同的变量,因为在这一点上,会有不同的范围,因此这不会是一个问题


简而言之,您不必重用变量,如果您的逻辑被分解为执行单个任务的函数,请不要将它们命名为
$result1
result2
等。。。这是项目中的一个标志。

如果使用相同的变量存储数据,则每次迭代都会用新值覆盖变量值,而
while
语句之后的值是最后一次迭代。

$temp
是while的局部变量,如果您以前没有定义它,那么可以这样使用

$query
,根据该语言的功能,可以这样使用。

基本PHP代码 假设您希望将数据库中的一些信息存储到变量中,然后在进行更多编码之前使用它

我们有这个示例代码。将
id
值存储到
$temp
变量中。我们的产出是多少

$query = mysqli_query($db, "SELECT * FROM myTable1")

while($result = mysqli_fetch_assoc($query)){
   $temp = $result['id'];
}
例如,表
myTable1
包含如下数据

+----+---------+---------+
| id |  Col1   |  Col2   |
+----+---------+---------+
|  1 | Value 1 | Value 2 |
|  2 | Value 1 | Value 2 |
|  3 | Value 1 | Value 2 |
|  4 | Value 1 | Value 2 |
+----+---------+---------+
+----+---------+---------+
| id |  Col1   |  Col2   |
+----+---------+---------+
|  3 | Value 1 | Value 2 |
|  5 | Value 1 | Value 2 |
|  6 | Value 1 | Value 2 |
|  8 | Value 1 | Value 2 |
+----+---------+---------+
我们的
$temp
变量将等于
4
。因为您从该表中获取所有内容,然后获取出现的每个结果。现在,让我们使用这个变量

echo 'Selected id from table myTable1 equals ' . $temp;
导致

从表myTable1中选择的id等于4

然后,我们从另一个名为
myTable2
的表中获取数据

$query = mysqli_query($db, "SELECT * FROM myTable2")

while($result = mysqli_fetch_assoc($query)){
   $temp = $result['id'];
}
该表包含这样的数据

+----+---------+---------+
| id |  Col1   |  Col2   |
+----+---------+---------+
|  1 | Value 1 | Value 2 |
|  2 | Value 1 | Value 2 |
|  3 | Value 1 | Value 2 |
|  4 | Value 1 | Value 2 |
+----+---------+---------+
+----+---------+---------+
| id |  Col1   |  Col2   |
+----+---------+---------+
|  3 | Value 1 | Value 2 |
|  5 | Value 1 | Value 2 |
|  6 | Value 1 | Value 2 |
|  8 | Value 1 | Value 2 |
+----+---------+---------+
同样,同样的情况发生了,
$temp
变量现在等于
8
。让我们用同样的方法

echo 'Selected id from table myTable2 equals ' . $temp;
导致

从表myTable2中选择的id等于8

最终结果 从表myTable1中选择的id等于4
从表myTable2中选择的id等于8

结论 这里没什么问题。如果你愿意,你可以这样做。但请注意,如果您有更多的代码行,则不建议多次使用同名变量

更复杂的PHP代码 相同的表、结构和数据。让我们更改代码

function printIndex($id) {
    echo 'Index = ' . $id;
}
$query = mysqli_query($db, "SELECT * FROM myTable1")

while($result = mysqli_fetch_assoc($query)){
   $temp = $result['id']; // Store id for further use
}

$query = mysqli_query($db, "SELECT * FROM myTable2")

while($result = mysqli_fetch_assoc($query)){
   $temp = $result['id']; // Store id for further use
}

printIndex($temp); // Print stored id
输出 指数=8

结论
糟糕的编码。您必须使用唯一的变量名来防止这种情况。

您可以在逻辑上使用相同的变量名。它不会给您一个错误(如果您在此上下文中在循环外使用这些变量,有时可能会出现错误)。但不建议对变量名使用通用关键字

相反,尝试根据您的模型命名变量。请看下面的例子

如果您的“myTable1”是关于学生的,那么您可以使用$student而不是$result1。
同样,如果您的“myTable2”是关于产品的,那么您可以使用$product而不是$result2。

“我的意思是可以使用这样的代码吗?我应该像$result1$result2这样对变量进行不同的命名吗?”-在我看来是可以的,因为您查询的是两个不同的表。但是,这可能取决于您是否在同一文件中使用相同的代码,然后希望使用(回显)相同的变量。这取决于您希望如何使用该
$temp
变量。如果您在第二次
循环
之前使用它,那么它就可以了。否则,您只需在循环过程中替换并丢失第一个
中的数据。您的编辑“比如说,在使用相同的变量名称还是给变量不同的名称之间,哪一个更好、更安全?”-现在使这个问题过于广泛,更不清楚我投票决定用哪一个来结束这个问题;新的答案并没有抓住这个问题,我并没有就此提交答案。这个问题不清楚,也太宽泛了,它是关于可变范围的。如果在同一个函数中定义并使用该变量,那么就可以了。否则,假设它是一个全局变量,我认为它是不安全的,因为其他类可能使用该变量这比最初发布的更进一步。嗨,弗雷德!那么OP对最初的问题进行了扩展?他们当然有。我有一种奇怪的感觉,这个问题从一开始就不清楚。请看修订。好的,我也展开了