小编Man*_*ngo的帖子

JavaScript:扩展元素原型

我已经看到很多关于扩展Element的讨论.据我所知,这些是主要问题:

  • 它可能与其他库冲突
  • 它为DOM例程添加了未记录的功能
  • 它不适用于旧版IE
  • 它可能与未来的变化相冲突

给定一个不引用其他库的项目,文档会发生变化,并且不会给历史浏览器带来任何影响:

是否有任何技术原因不扩展Element原型.以下是有用的示例:

Element.prototype.toggleAttribute=function(attribute,value) {
    if(value===undefined) value=true;
    if(this.hasAttribute(attribute)) this.removeAttribute(attribute);
    else this.addAttribute(attribute,value);
};
Run Code Online (Sandbox Code Playgroud)

在没有提供合理解释的情况下,我已经看到太多关于扩展原型的弊端的评论.

注1:上面的例子可能太明显了,toggleAttribute将来可能添加的方法也是如此.对于讨论,想象它被称为manngoToggleAttribute.

注2:我已经删除了该方法是否已存在的测试.即使这种方法已经存在,覆盖它也更容易预测.无论如何,我假设这里的重点是该方法尚未定义,更不用说实现了.这就是重点.

javascript prototype element extending

7
推荐指数
2
解决办法
4514
查看次数

独立(便携式)PHP CLI 二进制文件

出于教学目的,我正在寻找适用于 Mac、Windows 和 Linux 的独立 PHP 二进制文件。

计划是将二进制文件作为单个文件分发给学生以测试 PHP 脚本,而无需安装完整的 Web 服务器。我希望能够使用 CLI 来做这样的事情:

# (Mac)
cd php-binary
./php …


# (Win)
cd php-binary
.\php.exe …
Run Code Online (Sandbox Code Playgroud)

我特别希望能够执行:

php -S localhost:8000
Run Code Online (Sandbox Code Playgroud)

我需要确保二进制文件已静态安装所有内容,因此不依赖于外部库,也没有版本问题。

问题是,这些二进制文件是免费提供的吗?如果做不到这一点,它们可以很容易地编译吗?

php development-environment command-line-interface

6
推荐指数
1
解决办法
1876
查看次数

Inner Join vs Natural Join vs USING子句:有什么优势吗?

想象一下,我有两个简单的表,例如:

CREATE TABLE departments(dept INT PRIMARY KEY, name);
CREATE TABLE employees(id PRIMARY KEY, fname, gname,
    dept INT REFERENCES departments(dept));
Run Code Online (Sandbox Code Playgroud)

(当然简化).

我可以有以下任何陈述:

SELECT * FROM employees e INNER JOIN departments d ON e.dept=d.dept;
SELECT * FROM employees e NATURAL JOIN departments d;
SELECT * FROM employees e JOIN departments d USING(dept);
Run Code Online (Sandbox Code Playgroud)

可以在这里找到一个工作示例:SQL Fiddle:http://sqlfiddle.com/#!15/864a5/13/10

它们都给出了几乎相同的结果 - 当然是相同的行.

我一直更喜欢第一种形式,因为它具有灵活性,可读性和可预测性 - 你清楚地定义了什么与什么有关.

现在,除了第一种形式有重复的列之外,其他两种形式是否真的有优势?或者他们只是语法糖?

我可以看到后一种形式的缺点是你应该命名你的主键和外键相同,这并不总是实用的.

sql join

6
推荐指数
1
解决办法
3650
查看次数

默认为模拟的 PDO 准备语句

我已经多次读到,默认情况下,PDO 不使用本机准备好的语句,而是更喜欢模拟它们。要启用真正的准备好的语句,您可以添加:

\n\n
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还读到 MySQL 是这样,但 PostgreSQL 不是这样。

\n\n

我真正希望阅读的一个地方是 PHP\xe2\x80\x99s 网站,但我发现根本没有提及它。

\n\n

我能找到的最接近的是来自http://php.net/manual/en/pdo.prepare.php

\n\n
\n

PDO 将为本身不支持它们的驱动程序模拟准备好的语句/绑定参数,并且如果驱动程序支持一种样式但不支持另一种样式,还可以将命名或问号样式参数标记重写为更合适的内容。

\n
\n\n

http://www.php.net/manual/en/ref.pdo-mysql.php它说:

\n\n
\n

PDO_MYSQL 将利用 MySQL 4.1 及更高版本中提供的本机预准备语句支持。如果您使用旧版本的 mysql 客户端库,PDO 将为您模拟它们。

\n
\n\n

就我个人而言,我更喜欢使用真正的准备好的语句,这样 \xe2\x80\x99s 就很容易修复,尤其是在数据库支持相当好的 2017 年。

\n\n

问题是:PDO 默认为模拟准备的记录在哪里?另外,这适用于所有数据库还是某些数据库?

\n\n

注意:存在一个问题:默认情况下 PDO 总是使用模拟的准备好的语句吗?。这不是重复的(我已经读过):

\n\n
    \n
  • 这个问题已经5年了
  • \n
  • 链接已失效
  • \n
  • 评论中有一些不同意见。
  • \n
\n\n

这个问题并没有告诉我这实际上记录在哪里。

\n

php pdo prepared-statement

6
推荐指数
0
解决办法
374
查看次数

HTML模板元素:澄清

我最近发现了HTML template元素,希望对它进行一些澄清。

据我所知,这三个主要特征是:

  • template 没有呈现在屏幕上
  • template 没有进入DOM
  • 在及其内容content之间还有一个虚拟属性template

除了这些之外,a <template>可能还被div隐藏在屏幕和DOM中。在这方面,用于利用的JavaScript template与尝试使用伪造JavaScript的JavaScript 相同div

问题是,这正确吗?我问是因为:

  • 我只需要自己想清楚
  • 为不支持的浏览器伪造一个相对容易。

谢谢

html javascript templates html5-template

5
推荐指数
1
解决办法
938
查看次数

XMLHttpRequest和FormData不提交数据

我正在尝试使用post方法和FormData对象通过ajax提交表单。

这是JavaScript的简化版本:

var form=…; //  form element
var url=…;  //  action
form['update'].onclick=function(event) {    //  button name="update"
    var xhr=new XMLHttpRequest();
        xhr.open('post',url,true);
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    var formData=new FormData(form);
        formData.append('update', true);    // makes no difference
    xhr.send(formData);
    xhr.onload=function() {
        alert(this.response);
    };
};
Run Code Online (Sandbox Code Playgroud)

该表格有:

  • 一个按钮(type="button" name="update")以运行脚本
  • 不,action并且method="get"

我的PHP脚本具有以下内容:

if(isset($_POST['update'])) {
    print_r($_POST);
    exit;
}

//  more stuff

print 'other stuff';
Run Code Online (Sandbox Code Playgroud)

当我尝试它时,PHP进入了其余的代码,并且得到了其他输出,而不是我从print_r语句中期望的输出。

我尝试了以下变体:

  • new FormData()(无表格)。如果我手动添加数据,这确实可行update
  • new FormData(form)。无论我是否update手动添加,这都行不通。
  • 将表单方法更改为post …

javascript php ajax xmlhttprequest form-data

5
推荐指数
1
解决办法
2156
查看次数

SQL Server:计算列的性能成本是多少?

如果我在表中包含计算列,它是否会给它带来性能负担?

例如,如果我有一个表定义如下:

CREATE TABLE users(
    givenname …,
    familyname …,
    fullname AS givenname+' '+familyname
);
Run Code Online (Sandbox Code Playgroud)

...每次我SELECT从查询中重新计算?

如果计算列是PERSISTED?它会有帮助吗?

sql-server calculated-columns query-performance

5
推荐指数
1
解决办法
2084
查看次数

postgres select for update查询含义

以下查询在 postgres 中意味着什么?我知道这与锁定有关,但有人可以解释一下。

select col1, col2 from table where col1=123 for update;
Run Code Online (Sandbox Code Playgroud)

实际上我有一张像这样的桌子

id  col1  col2  receipt_id  receipt_year
1   ddd   ggg   1           2018
2   ddd   eee   2           2018
Run Code Online (Sandbox Code Playgroud)

我需要每年将receipt_id重置为1。即1/2017、1/2018等。我正在使用查询

select max(receipt_id) from table where receipt_year=$current_year;
Run Code Online (Sandbox Code Playgroud)

然后如果找到 id,我将其添加 1,否则我将其设置为 1。

这是正确的方法吗?

id  col1  col2  receipt_id  receipt_year
1   ddd   ggg   1           2018
2   ddd   eee   2           2018
Run Code Online (Sandbox Code Playgroud)

2019 年:

id  col1  col2  receipt_id  receipt_year
1   ddd   ggg   1           2018
2   ddd   eee   2           2018
3   lol   lpl   1           2019 
Run Code Online (Sandbox Code Playgroud)

目前我正在这样做:

$current_year = …
Run Code Online (Sandbox Code Playgroud)

php postgresql

5
推荐指数
1
解决办法
7042
查看次数

如何阻止Firefox强制在本地开发服务器上使用https://?

我正在使用AMPPS在Macintosh上运行开发环境。

我有一个包含项目文件的文件夹。我已将此添加到我的hosts文件中:

127.0.0.1   www.example.com
Run Code Online (Sandbox Code Playgroud)

并且我已经相应地设置了虚拟域。

当我尝试使用Firefox连接到站点时:

http://www.example.com
Run Code Online (Sandbox Code Playgroud)

它总是重定向到:

https://www.example.com
Run Code Online (Sandbox Code Playgroud)

然后抱怨它。

该文件夹中除了虚拟index.html文件之外没有其他任何东西。

当我在lynxSafariChrome中测试该网站时,便进入了示例网站。当我在Firefox中进行测试时,就是我遇到的问题。

Firefox是我的主要浏览器,因此可能存在缓存问题,但是我看不到任何没有尝试过的清除缓存的方法:试图忘记页面或清除缓存。

我已经尝试过这里和其他地方提到的所有建议,但是显然我缺少一些东西。

如何阻止Firefox执行此操作?

https firefox redirect

5
推荐指数
1
解决办法
730
查看次数

CSS 网格:如何将所有内容放在一行上?

我正在尝试更多地使用网格,但我不能\xe2\x80\x99t 弄清楚什么应该是一个简单的问题。如何将所有元素放在一行中?

\n\n

也就是说,我想模拟flex单行的布局。

\n\n

我知道我可以在下面的示例中使用grid-template-columns: 1fr 1fr 1fr 1fr;,但我不想设置特定的列数。

\n\n

\r\n
\r\n
div#flex {\r\n  display: flex;\r\n  flex-direction: row; /* I know that\xe2\x80\x99s not necessary */\r\n}\r\ndiv#flex>button {\r\n  flex: 1;\r\n}\r\n\r\ndiv#grid {\r\n  display: grid;\r\n  grid-template-rows: 1fr;\r\n}\r\ndiv#grid>button {\r\n\r\n}
Run Code Online (Sandbox Code Playgroud)\r\n
<div id="flex">\r\n  <button>One</button>\r\n  <button>Two</button>\r\n  <button>Three</button>\r\n  <button>Four</button>\r\n</div>\r\n\r\n<div id="grid">\r\n  <button>One</button>\r\n  <button>Two</button>\r\n  <button>Three</button>\r\n  <button>Four</button>\r\n</div>
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

css flexbox css-grid

5
推荐指数
1
解决办法
5280
查看次数