我已经看到很多关于扩展Element的讨论.据我所知,这些是主要问题:
给定一个不引用其他库的项目,文档会发生变化,并且不会给历史浏览器带来任何影响:
是否有任何技术原因不扩展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:我已经删除了该方法是否已存在的测试.即使这种方法已经存在,覆盖它也更容易预测.无论如何,我假设这里的重点是该方法尚未定义,更不用说实现了.这就是重点.
出于教学目的,我正在寻找适用于 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)
我需要确保二进制文件已静态安装所有内容,因此不依赖于外部库,也没有版本问题。
问题是,这些二进制文件是免费提供的吗?如果做不到这一点,它们可以很容易地编译吗?
想象一下,我有两个简单的表,例如:
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
它们都给出了几乎相同的结果 - 当然是相同的行.
我一直更喜欢第一种形式,因为它具有灵活性,可读性和可预测性 - 你清楚地定义了什么与什么有关.
现在,除了第一种形式有重复的列之外,其他两种形式是否真的有优势?或者他们只是语法糖?
我可以看到后一种形式的缺点是你应该命名你的主键和外键相同,这并不总是实用的.
我已经多次读到,默认情况下,PDO 不使用本机准备好的语句,而是更喜欢模拟它们。要启用真正的准备好的语句,您可以添加:
\n\n$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);\nRun 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\n\nPDO 将为本身不支持它们的驱动程序模拟准备好的语句/绑定参数,并且如果驱动程序支持一种样式但不支持另一种样式,还可以将命名或问号样式参数标记重写为更合适的内容。
\n
在http://www.php.net/manual/en/ref.pdo-mysql.php它说:
\n\n\n\n\nPDO_MYSQL 将利用 MySQL 4.1 及更高版本中提供的本机预准备语句支持。如果您使用旧版本的 mysql 客户端库,PDO 将为您模拟它们。
\n
就我个人而言,我更喜欢使用真正的准备好的语句,这样 \xe2\x80\x99s 就很容易修复,尤其是在数据库支持相当好的 2017 年。
\n\n问题是:PDO 默认为模拟准备的记录在哪里?另外,这适用于所有数据库还是某些数据库?
\n\n注意:存在一个问题:默认情况下 PDO 总是使用模拟的准备好的语句吗?。这不是重复的(我已经读过):
\n\n这个问题并没有告诉我这实际上记录在哪里。
\n我最近发现了HTML template元素,希望对它进行一些澄清。
据我所知,这三个主要特征是:
template 没有呈现在屏幕上template 没有进入DOMcontent之间还有一个虚拟属性template除了这些之外,a <template>可能还被div隐藏在屏幕和DOM中。在这方面,用于利用的JavaScript template与尝试使用伪造JavaScript的JavaScript 相同div。
问题是,这正确吗?我问是因为:
谢谢
我正在尝试使用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 …如果我在表中包含计算列,它是否会给它带来性能负担?
例如,如果我有一个表定义如下:
CREATE TABLE users(
givenname …,
familyname …,
fullname AS givenname+' '+familyname
);
Run Code Online (Sandbox Code Playgroud)
...每次我SELECT从查询中重新计算?
如果计算列是PERSISTED?它会有帮助吗?
以下查询在 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) 我正在使用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文件之外没有其他任何东西。
当我在lynx或Safari或Chrome中测试该网站时,便进入了示例网站。当我在Firefox中进行测试时,就是我遇到的问题。
Firefox是我的主要浏览器,因此可能存在缓存问题,但是我看不到任何没有尝试过的清除缓存的方法:试图忘记页面或清除缓存。
我已经尝试过这里和其他地方提到的所有建议,但是显然我缺少一些东西。
如何阻止Firefox执行此操作?
我正在尝试更多地使用网格,但我不能\xe2\x80\x99t 弄清楚什么应该是一个简单的问题。如何将所有元素放在一行中?
\n\n也就是说,我想模拟flex单行的布局。
我知道我可以在下面的示例中使用grid-template-columns: 1fr 1fr 1fr 1fr;,但我不想设置特定的列数。
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