我现在正在玩MySQLi,试图找出它是如何工作的.在我目前的项目中,我总是喜欢在编码时回显一个查询字符串,只是为了确保一切正确,并快速调试我的代码.但是......我怎么能用准备好的MySQLi语句做到这一点?
例:
$id = 1;
$baz = 'something';
if ($stmt = $mysqli->prepare("SELECT foo FROM bar WHERE id=? AND baz=?")) {
$stmt->bind_param('is',$id,$baz);
// how to preview this prepared query before acutally executing it?
// $stmt->execute();
}Run Code Online (Sandbox Code Playgroud)
我一直在浏览这个清单(http://www.php.net/mysqli)但没有任何运气.
编辑
好吧,如果从MySQLi内部不可能,也许我会坚持这样的事情:
function preparedQuery($sql,$params) {
for ($i=0; $i<count($params); $i++) {
$sql = preg_replace('/\?/',$params[$i],$sql,1);
}
return $sql;
}
$id = 1;
$baz = 'something';
$sql = "SELECT foo FROM bar WHERE id=? AND baz=?";
echo preparedQuery($sql,array($id,$baz));
// outputs: SELECT foo …Run Code Online (Sandbox Code Playgroud) 我有一个选择框,我想在将其更改为特定选项之前添加确认.例:
<select name="select">
<option value="foo" selected="selected">foo</option>
<option value="bar">bar</option>
</select>??????????????????Run Code Online (Sandbox Code Playgroud)
$('select').change(function() {
var selected = $(this).val();
if (selected == 'bar') {
if (!confirm('Are you sure?')) {
// set back to previously selected option
}
}
});Run Code Online (Sandbox Code Playgroud)
我正在考虑添加一个隐藏的输入字段,并在每次更改选择时更新其值.这样我就可以检索change函数中的前一个值.示例:
<input type="hidden" name="current" value="foo" />Run Code Online (Sandbox Code Playgroud)
$('select').change(function() {
var selected = $(this).val();
var current = $('input[name=current]').val();
if (selected == 'bar') {
if (!confirm('Are you sure?')) {
$(this).val(current);
return false;
}
}
$('input[name=current]').val(selected);
});Run Code Online (Sandbox Code Playgroud)
有没有更简单/更好的方法来实现这一目标?
说我有一个数组:
$array = Array(
'foo' => 5,
'bar' => 12,
'baz' => 8
);
Run Code Online (Sandbox Code Playgroud)
我想在我的视图中打印一行文字,如下所示:
"价值观是:foo(5),bar(12),baz(8)"
我能做的是:
$list = Array();
foreach ($array as $key => $value) {
$list[] = "$key ($value)";
}
echo 'The values are: '.implode(', ',$list);
Run Code Online (Sandbox Code Playgroud)
但我觉得应该有一个更简单的方法,而不必创建$list数组作为额外的步骤.我一直想array_map和array_walk,但没有成功.
所以我的问题是:最好和最短的方法是什么?
我正在尝试设置一个可以有多个级别的列表,parentId用于定义其父级.第一项parentId是NULL.一些条目的示例:
Run Code Online (Sandbox Code Playgroud)id parentId name
1 NULL item1
2 NULL item2
3 1 item3
4 2 item4
5 3 item5
6 3 item6
所以,1和2是主要项目; 3是1的孩子; 4是2的孩子; 5是3的孩子(1本身的孩子); 6也是3的孩子(自己是1的孩子); 等等
我坚持创建一个数组,正确地将这些项目添加到正确的级别.它应该如下所示:
Array
(
[1] => Array
(
[name] => item1
[parentId] =>
[children] => Array
(
[3] => Array
(
[name] => item3
[parentId] => 1
[children] => Array
(
[5] => Array
(
[name] => item5
[parentId] => 3
)
[6] => Array
(
[name] => item6 …Run Code Online (Sandbox Code Playgroud) 我正在尝试为OS X的Keyboard Maestro创建一个宏,执行以下操作:
其中一个选项是"执行一个shell脚本",所以我认为这样做是为了1.在谷歌搜索了一下后我想出了这个:
cd /path/to/directory/
ls -t | head -n1Run Code Online (Sandbox Code Playgroud)
这会对它进行排序,并返回第一个文件名.但是,它似乎也包括换行符,我不想要.至于2:我可以在应用程序中输出带有不同操作的文本"最新文件:",并将文件名粘贴到其后面.但我想知道你是否不能返回"随机文本"+ ls命令的结果.
所以我的问题是:我只能使用ls命令吗?而且我怎么只是最新的文件的名称,没有任何换行或退货?
我正在尝试使用GreaseMonkey脚本向Gmail添加一些jQuery内容.添加jQuery功能工作正常,但问题是我无法真正检测Gmail何时完成加载.
这基本上是发生的事情:
此时,一堆JavaScript已加载到DOM中,可能会调用一些使用AJAX加载视图其余部分的函数.
我希望jQuery 在第8步之后完成任务,当时所有内容都已完成加载.
有谁知道如何做/检测这个?
我正在使用jQuery Autocomplete插件,但我在结果突出显示时遇到了一些问题.找到匹配项但输入的关键字包含空格时,没有突出显示.例:
search ="foo",result ="foo bar",显示=" foo bar"
search ="foo ba",result ="foo bar",显示="foo bar"
所以,我正在尝试使用自动完成功能的高亮选项来修复此问题,您可以使用该功能对结果执行一些自定义操作.目前我有这个:
$('.autocomplete').autocomplete('getmatch.php', {
highlight: function(match, keywords) {
keywords = keywords.split(' ').join('|');
return match.replace(/(get|keywords|here)/gi,'<b>$1</b>');
}
});
replace函数用粗体版本替换字符串中所有匹配的单词,这是有效的.但是,我不知道如何将关键字放入该功能.我虽然将它们分开,然后用'|'加入它们,所以"foo bar"最终会像"foo | bar"一样.但这样的事情似乎不起作用:
Run Code Online (Sandbox Code Playgroud)return match.replace(/(keywords)/gi,'<b>$1</b>'); // seen as text, I think
Run Code Online (Sandbox Code Playgroud)return match.replace('/'+(keywords)+'/gi','<b>$1</b>'); // nothing either
有任何想法吗?
现在像jQuery这样的JavaScript库比以往更受欢迎,.js文件开始包含越来越多的网站逻辑.它如何以及从何处提取数据/信息,如何处理信息等等.这不一定是坏事,但我想知道这可能是一个安全问题.
当然,数据的真实处理仍然在后端使用PHP或其他语言进行,并且确保在此时不会发生任何不需要的事情是关键.但仅仅通过查看网站的.js(严重依赖于jQuery),它会告诉一个人可能比开发人员想要的更多.特别是因为现在每个浏览器都带有相当广泛的Web开发人员环境或附加组件.即使对于操纵DOM的新手来说也不是那么重要.一旦你弄清楚了什么代码,以及如何通过编辑DOM来影响它,就会开始"有趣".
所以我的主要关注点是:
我不希望每个人都能够看一个.js文件,看看到底(或者说:对于很大一部分)我的网站,Web应用程序或CMS是如何工作的 - 还有什么,它做什么,它是如何做等
我担心通过'揭开'这些信息,比我更聪明的人想出一种操纵DOM的方法,以便影响他们现在知道网站使用的JavaScript功能,可能绕过我实施的后端检查(因而错误地假设它们足够好了).
我已经为例如Web应用程序的不同部分使用了不同的.js文件.但是总有一些东西必须全球可用,有时这包含的东西比我想要公开的要多.而且因为它全部"在那里",谁说他们无论如何都找不到那些其他文件.
我有时会看到一个巨大的JavaScript,没有换行符等等.就像紧凑的jQuery文件一样.我确定有一些应用程序或技巧可以将您的普通.js文件转换为一个长字符串.但是,如果它可以做到这一点,是不是很容易将它变回更可读的东西(除了节省空间之外没有意义)?
最后,我在考虑是否有可能检测到.js文件的请求是否来自网站本身(通过在HTML中包含脚本),而不是直接下载.也许通过使用例如Apache的ModRewrite阻止后者,可以在HTML中使用.js文件,但是当有人试图访问它时,它被阻止.
你对此有何看法?我反应过度了吗?我应该尽可能地拆分我的JS,还是花更多的时间进行三重检查(后端)脚本并包括更多检查以防止造成伤害?或者是否有一些最佳实践来限制JavaScripts的暴露以及它们包含的所有信息?
我正在尝试在SELECT查询中进行一些计算,使用用户变量来执行此操作.这很好用,直到我开始使用类似于SUM从连接表中收集数据的函数.
简化示例:
SET @a = 1;
SELECT @a := SUM(1 + 1) AS sum, @a
Run Code Online (Sandbox Code Playgroud)
结果:
+------+------+ | sum | @a | +------+------+ | 2 | 1 | +------+------+
我希望@a在这里是2.
其他例子:
SELECT @b := SUM(1 + 1) AS sum, @b;
Run Code Online (Sandbox Code Playgroud)
+------+------+ | sum | @b | +------+------+ | 2 | NULL | +------+------+
现在它是NULL,因为@b在查询之前没有设置.
看来该变量不会被SUM函数的结果覆盖.有没有什么办法解决这一问题?
我有一个充满URL的表.该网址是在各种格式:http://foo.com,http://bar.foo.com,http://foo.com/bar等,但我只是在域名本身感兴趣,所以在这种情况下:foo.com.我想要做的是选择此表中存在多少次域名.所以类似于:
SELECT "whatever the domain is in field 'url'", COUNT(*) AS count
FROM table_with_urls
GROUP BY "whatever the domain is in field 'url'"Run Code Online (Sandbox Code Playgroud)
Stack Overflow上有一些类似的问题,但没有真正回答这个问题.我不能使用LIKE或匹配REGEXP,因为我不(总是)寻找特定的域名来匹配,但大多数情况下我只想要表中的所有域名以及总计数.
这可能使用MySQL吗?
jquery ×4
php ×3
mysql ×2
arrays ×1
autocomplete ×1
command-line ×1
gmail ×1
greasemonkey ×1
highlighting ×1
javascript ×1
mysqli ×1
regex ×1
security ×1
shell ×1