繁体   English   中英

我将如何在 php 中编写 sql 查询以获得此结果?

[英]How would I write the sql query in php to get this result?

首先,我目前正在尝试学习 php,我想我会构建一个基本的维护管理应用程序来更好地掌握我在教程中看到的所有内容,但我遇到了障碍。 我一直在尝试按照在线的各种教程使其工作,但到目前为止我没有成功,所以我想我会在这里寻求帮助。 我真的希望你能帮助我。

我想知道的是如何编写 php 和 mysql 将前 3 个表中的数据从下面写入到所需的表?

Clients
------------------------------
client_id    | client_name
------------------------------  
    1        | client_1 
------------------------------  
    2        | client_2
------------------------------  
    3        | client_3 


Equipments
------------------------------
eq_id        | eq_name
------------------------------  
    1        | pc 
------------------------------  
    2        | laptop
------------------------------  
    3        | printer


Operations
------------------------------------------------
op_id        | op_desc
------------------------------------------------    
    1        | dust cleaning
------------------------------------------------    
    2        | changing processor cooling paste
------------------------------------------------    
    3        | cpu replacement
------------------------------------------------    
    4        | display replacement
------------------------------------------------    
    5        | dvd-rom replacement
------------------------------------------------    
    6        | ram replacement
------------------------------------------------    
    7        | cartrige replacement



Desired_table
-------------------------------------
id  | client_id  | eq_id  | op_id  |
-------------------------------------   
  1 |    1       |    1   |   1    |
-------------------------------------
  2 |    1       |    1   |   2    |
-------------------------------------   
  3 |    1       |    1   |   3    |
-------------------------------------   
  4 |    1       |    1   |   5    |
-------------------------------------   
  5 |    1       |    2   |   1    |
-------------------------------------   
  6 |    1       |    2   |   2    |
-------------------------------------   
  7 |    1       |    2   |   4    |
-------------------------------------   
  8 |    2       |    1   |   1    |
-------------------------------------   
  9 |    2       |    1   |   2    |
-------------------------------------   
  10|    2       |    1   |   3    |
-------------------------------------   
  11|    2       |    1   |   5    |
-------------------------------------   
  12|    2       |    3   |   1    |
-------------------------------------   
  13|    2       |    3   |   7    |

我想我会有一个表单,其中包含客户端数据和设备数据和操作数据的输入字段,我将在下拉列表中使用。 当我选择设备时,会出现一个带有操作的新下拉列表,然后提交它。

希望这不会被标记为太广泛的主题:)

使用您的 bitbucket 中的代码应该可以做到:

$page = $db->prepare("
    INSERT INTO new_table_name (column_name1, column_name2, column_name3) 
    VALUES (:col1, :col2, :col3)
");

$page->bindparam(':col1', $value1);
$page->bindparam(':col2', $value2);
$page->bindparam(':col3', $value3);
$page->execute();
if($page->rowcount() > 0){
    echo "Inserted a new row";
}

这是一个示例,将 'new_table_name' 替换为新表的名称并更改列名称。

之后,只需将 $value1、2 和 3 更改为包含要插入的值的变量,就可以了。

如果您想知道插入是否成功,只需检查 $page->rowcount()。 如果行数大于 0,则表示成功。

澄清一下,如果您还不知道,这称为准备好的声明。 代码的作用是这样的:

  • Prepare 告诉服务器你打算做什么。 这增加了一个非常强大的保护层,因为基本的sql 注入几乎不可能做到。

  • 之后,您将变量绑定到给定的参数(其他语法也是可能的,我更喜欢这个)。 代码会处理引号,因此只需将参数放在那里即可。

  • 执行实际查询

为了更好的衡量,您可以向 bindparam 添加 2 个额外的参数。 在第三个中,您可以定义一个变量类型,PDO::PARAM_STR 和 PDO::PARAM_INT 阻止任何其他类型的变量。 第四个让你设置最大长度,如果变量更长,它会被阻塞。

这将如下所示:

$page->bindparam(':col1', $value1, PDO::PARAM_STR, 100);
//block anything which isn't a string or longer than 100 characters

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM