我正在php
开发一个webaplicattion,其中会有一个名为'My Products'的区域。您可以在此区域查看列出的产品。让我们说你卖了一辆车。你会有类似的东西:
我的问题:如何选择carid,以便将cardid作为键,将其他值(例如模型,颜色等等)作为值?
我正在使用mysql
来存储商家信息。 SQL TABLE
:
+---------+------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------------------------------+------+-----+---------+----------------+
| carid | int(11) | NO | MUL | NULL | auto_increment |
| brand | enum('Alfa Romeo','Aston Martin','Audi') | NO | | NULL | |
| color | varchar(20) | NO | | NULL | |
| type | enum('gasoline','diesel','eletric') | YES | | NULL | |
| price | mediumint(8) unsigned | YES | | NULL | |
| mileage | mediumint(8) unsigned | YES | | NULL | |
| model | text | YES | | NULL | |
| year | year(4) | YES | | NULL | |
| user | varchar(30) | YES | | NULL | |
+---------+------------------------------------------+------+-----+---------+----------------+
我的伪代码是这样的:
我从array_combine
到foreach inside foreach
尝试了一些代码。
这是我到目前为止的代码:
$qry_id = "select carid from cars where user='$login'";
if ($car_id = mysqli_query($link, $qry_id)){
while ($row = mysqli_fetch_assoc($car_id)){
//It will fetch the iD of the user in the DB
$user_id = $row["carid"];
$qry_model = "select model from cars where carid='$user_id'";
if($model_obj = mysqli_query($link, $qry_model)){
while ($row_2 = mysqli_fetch_assoc($model_obj)){
$model = $row_2['model'];
$final_array = array($user_id => $model);
}
}
}
}
我不知道这是否是正确的方法,因为它是我正在构建的第一个webapp。 我只是在这段代码中使用模型值来实现简单性。
答案 0 :(得分:2)
$q = "SELECT * FROM cars where user=?";
if ($stmt = $pdo->preapre($q)){
$result=[];
$stmt->execute([$login]);
while ($row = $stmt->fetchObject()){
$carId = $row->carid;
unset($row->carid);
$result[$carId]=$row;
}
}
现在注意$pdo
是pdo
连接到数据库而不是mysqli
的对象,你可以用mysqli做同样的事情,但我不习惯它
另外,我建议您不要在每一列上使用用户名,而应将userId作为外键存储到表用户的主键ID中
将节省更多存储空间,使查询更快(查找数字比查找字符串更容易),用户可以更改其名称而无需在所有其他表格中更改其名称(userid赢了& #39;当然要改变了)
如果想知道为什么10看到帖子MySQL datatype INT(11) whereas UNSIGNED INT(10)?
,也应该unsigned int(10)
而不是int(11)
答案 1 :(得分:1)
您可以执行以下操作
注意这个查询不安全并且是SQL注入,我建议使用预处理语句或PDO
$ carArray变量最终将使用carid作为键的数组
$query = "select * from cars where user='$login'";
$result = mysqli_query($query);
$carArray = array();
while ($row = mysqli_fetch_assoc($result)){
$carArray[$row['carid']] = $row;
}
答案 2 :(得分:1)
要避免SQL注入,请使用预准备语句。您可以使用一个查询来获取汽车的所有属性:
$qry_id = "select carid, model, price, color from cars where user=?";
$stmt = mysqli_prepare($link , $qry_d) or die("SQL statement error");
// Bind the login parameter to the statement
mysqli_stmt_bind_param($stmt, "s", $login);
mysqli_stmt_execute($stmt);
// bind every column in the SELECT
mysqli_stmt_bind_result($stmt, $user_id, $carid, $model, $price, $color);
while (mysqli_stmt_fetch($stmt)){
$final_array[] = array(
"model" => $model,
"price" => $price,
"color" => $color
);
}