我有一个PDO的问题,我很想在被它困扰很长一段时间后得到答案.
举个例子:
我将一个ID数组绑定到PDO语句,以便在MySQL IN语句中使用.
该数组将是:$ values = array(1,2,3,4,5,6,7,8);
数据库安全变量是$ products = implode(','$ values);
因此,$ products将成为STRING,其值为:'1,2,3,4,5,6,7,8'
声明如下:
SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (:products)
Run Code Online (Sandbox Code Playgroud)
当然,$产品将被声明为:产品.
但是,当编译语句并绑定值时,它实际上看起来像这样:
SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN ('1,2,3,4,5,6,7,8')
Run Code Online (Sandbox Code Playgroud)
问题是它将IN语句内部的所有内容作为单个字符串执行,因为我已将其准备为逗号分隔值以绑定到语句.
我真正需要的是:
SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (1,2,3,4,5,6,7,8)
Run Code Online (Sandbox Code Playgroud)
我实际上可以实现这一点的唯一方法是将值放在字符串本身而不绑定它们,但我知道必须有一种更简单的方法来执行此操作.
有没有办法在mysql语句中重用计算字段.我收到错误"unknown column total_sale":
SELECT
s.f1 + s.f2 as total_sale,
s.f1 / total_sale as f1_percent
FROM sales s
Run Code Online (Sandbox Code Playgroud)
或者我必须重复计算,如果我添加了我需要的所有计算,这将产生一个非常长的SQL语句.
SELECT
s.f1 + s.f2 as total_sale,
s.f1 / (s.f1 + s.f2) as f1_percent
FROM sales s
Run Code Online (Sandbox Code Playgroud)
当然我可以在我的php程序中完成所有计算.
我已经设置了一个基本脚本,它发布了一系列路径来查找其中的模板文件; 目前它只搜索两个级别的深度,我遇到了一些麻烦,让我的头围绕逻辑进行广泛循环迭代所有子目录,直到长度为0.
所以,如果我有这样的结构:
./components
./components/template.html
./components/template2.html
./components/side/template.html
./components/side/template2.html
./components/side/second/template.html
./components/side/second/template2.html
./components/side/second/third/template.html
./components/side/second/third/template2.html
Run Code Online (Sandbox Code Playgroud)
它只搜索.html文件的"side"目录,理想情况下我希望它检查所有子目录和.html文件的传递目录.到目前为止,这是我的工作代码:
<?php
function getFiles($path){
$dh = opendir($path);
foreach(glob($path.'/*.html') as $filename){
$files[] = $filename;
}
if (isset($files)) {
return $files;
}
}
foreach ($_POST as $path) {
foreach (glob($path . '/*' , GLOB_ONLYDIR) as $secondLevel) {
$files[] = getFiles($secondLevel);
}
$files[] = getFiles($path);
}
sort($files);
print_r(json_encode($files));
?>
Run Code Online (Sandbox Code Playgroud) 使用printer_open()php中的函数,我能够打印保存在$content变量中的字符串,并且能够从文件中打印.
$printer = "\\\\Pserver.php.net\\printername";
$handler = printer_open($printer);
$content = "Test Content"; //string
printer_write($handler, $content);
printer_close($handler);
Run Code Online (Sandbox Code Playgroud)
但是有一个我从数据库生成的html输出,并且在网页上显示,我需要在页面加载后直接打印到相同格式的打印,我尝试了很多,但我不知道我该怎么办一旦页面加载后,使打印机直接打印相同的HTML输出printer_open().
我该怎么办?如果有的话,请建议比这更好的方法
更新
我不想使用javascript的windows.print()方法,因为它显示了打印对话框而不是直接向打印机启动打印作业
我希望用户点击提交表单和打印机直接打印收据而不要求任何东西
在这种情况下,我通过子查询加入并希望将deptid传递给已连接的子查询,但我得到'D未定义'错误消息.
SELECT *
FROM(
SELECT D.name AS deptname,D.id AS deptid,WT.sortposition AS deptsortposition
FROM departments D JOIN web_taxonomy WT ON (WT.deptid=D.id AND WT.classid=0)
WHERE D.web=1
ORDER BY sortposition
) AS D
LEFT JOIN (
SELECT C.name AS classname,C. id AS classid,C.department,WT.sortposition AS classsortposition,WT.deptid
FROM classes C
JOIN web_taxonomy WT ON (WT.classid=C.id AND WT.subclassid=0 AND WT.deptid=D.deptid)
WHERE web=1 ORDER BY classsortposition
) AS C ON (C.department=D.deptid)
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以传入类似于我在上面的强标签中包含的内容?
编辑:我犯了一个错误,最初留在工作查询中,只是添加了我想要运行的部分.本质上,我想通过仅获取与D子查询表中找到的共享相同deptid的行来最小化连接子查询的大小.
我对 Nginx 进行了这样的重写:
rewrite ^\/.+\/.+\/((?:css|img|includes|js|vendor|template)\/.+)?$ /$1 last;
Run Code Online (Sandbox Code Playgroud)
以下网址:
foo/bar/vendor/datetimepicker/css/datetimepicker.css
Run Code Online (Sandbox Code Playgroud)
被重定向到
css/datetimepicker.css
Run Code Online (Sandbox Code Playgroud)
代替
vendor/datetimepicker/css/datetimepicker.css
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它从头开始而不是只捕获最后一部分?
我发现解决方案可能是使表达式非贪婪,但我尝试的一切都失败了(在所有不同的位置添加了?,添加了 /U...)
我想使用jquery在div中获取背景图像.我试过了
var img = $('#id').attr('src');
Run Code Online (Sandbox Code Playgroud)
但
alert(img)
Run Code Online (Sandbox Code Playgroud)
显示为null/undefined.
我也尝试了这个document.getElementById('elementId').src;但结果相同.
我也试过这个var img = $('#outer').css('background-image');显示为url(s/bg.jpg)
这有什么不对?