小编Ale*_*lec的帖子

如何回应MySQLi预处理语句?

我现在正在玩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)

php mysqli

46
推荐指数
3
解决办法
5万
查看次数

jQuery如何撤消选择更改

我有一个选择框,我想在将其更改为特定选项之前添加确认.例:

<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)

有没有更简单/更好的方法来实现这一目标?

jquery

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

在PHP中使用关联数组

说我有一个数组:

$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_maparray_walk,但没有成功.

所以我的问题是:最好和最短的方法是什么?

php

19
推荐指数
4
解决办法
3万
查看次数

在PHP中使用parentIds创建多级数组

我正在尝试设置一个可以有多个级别的列表,parentId用于定义其父级.第一项parentId是NULL.一些条目的示例:

id parentId name
1    NULL     item1
2    NULL     item2
3    1        item3
4    2        item4
5    3        item5
6    3        item6
Run Code Online (Sandbox Code Playgroud)

所以,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)

php arrays

7
推荐指数
1
解决办法
9120
查看次数

如何通过终端获取最新文件的名称?

我正在尝试为OS X的Keyboard Maestro创建一个宏,执行以下操作:

  1. 根据创建的日期获取磁盘上目录中最新文件的名称;
  2. 粘贴文本"最新文件:"加上最新文件的名称.

其中一个选项是"执行一个shell脚本",所以我认为这样做是为了1.在谷歌搜索了一下后我想出了这个:

cd /path/to/directory/
ls -t | head -n1
Run Code Online (Sandbox Code Playgroud)

这会对它进行排序,并返回第一个文件名.但是,它似乎也包括换行符,我不想要.至于2:我可以在应用程序中输出带有不同操作的文本"最新文件:",并将文件名粘贴到其后面.但我想知道你是否不能返回"随机文本"+ ls命令的结果.

所以我的问题是:我只能使用ls命令吗?而且我怎么只是最新的文件的名称,没有任何换行或退货?

shell command-line keyboard-maestro

7
推荐指数
1
解决办法
3万
查看次数

使用jQuery和GreaseMonkey检测Gmail何时完成加载

我正在尝试使用GreaseMonkey脚本向Gmail添加一些jQuery内容.添加jQuery功能工作正常,但问题是我无法真正检测Gmail何时完成加载.

这基本上是发生的事情:

  1. 我刷新了Gmail
  2. 加载窗口开始
  3. 在加载窗口期间,GM脚本启动3次
  4. 加载窗口中的某些内容会发生变化
  5. GM脚本再次启动
  6. 页面更改
  7. GM脚本最后一次启动
  8. Gmail视图加载和完成

此时,一堆JavaScript已加载到DOM中,可能会调用一些使用AJAX加载视图其余部分的函数.

我希望jQuery 第8步之后完成任务,当时所有内容都已完成加载.

有谁知道如何做/检测这个?

jquery gmail greasemonkey

7
推荐指数
1
解决办法
1310
查看次数

突出显示jQuery.autocomplete的多个关键字

我正在使用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"一样.但这样的事情似乎不起作用:

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
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

regex jquery autocomplete highlighting

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

包含站点逻辑的安全性和JavaScript文件

现在像jQuery这样的JavaScript库比以往更受欢迎,.js文件开始包含越来越多的网站逻辑.它如何以及从何处提取数据/信息,如何处理信息等等.这不一定是坏事,但我想知道这可能是一个安全问题.

当然,数据的真实处理仍然在后端使用PHP或其他语言进行,并且确保在此时不会发生任何不需要的事情是关键.但仅仅通过查看网站的.js(严重依赖于jQuery),它会告诉一个人可能比开发人员想要的更多.特别是因为现在每个浏览器都带有相当广泛的Web开发人员环境或附加组件.即使对于操纵DOM的新手来说也不是那么重要.一旦你弄清楚了什么代码,以及如何通过编辑DOM来影响它,就会开始"有趣".

所以我的主要关注点是:

  1. 我不希望每个人都能够看一个.js文件,看看到底(或者说:对于很大一部分)我的网站,Web应用程序或CMS是如何工作的 - 还有什么,它做什么,它是如何做等

  2. 我担心通过'揭开'这些信息,比我更聪明的人想出一种操纵DOM的方法,以便影响他们现在知道网站使用的JavaScript功能,可能绕过我实施的后端检查(因而错误地假设它们足够好了).

我已经为例如Web应用程序的不同部分使用了不同的.js文件.但是总有一些东西必须全球可用,有时这包含的东西比我想要公开的要多.而且因为它全部"在那里",谁说他们无论如何都找不到那些其他文件.

我有时会看到一个巨大的JavaScript,没有换行符等等.就像紧凑的jQuery文件一样.我确定有一些应用程序或技巧可以将您的普通.js文件转换为一个长字符串.但是,如果它可以做到这一点,是不是很容易将它变回更可读的东西(除了节省空间之外没有意义)?

最后,我在考虑是否有可能检测到.js文件的请求是否来自网站本身(通过在HTML中包含脚本),而不是直接下载.也许通过使用例如Apache的ModRewrite阻止后者,可以在HTML中使用.js文件,但是当有人试图访问它时,它被阻止.


你对此有何看法?我反应过度了吗?我应该尽可能地拆分我的JS,还是花更多的时间进行三重检查(后端)脚本并包括更多检查以防止造成伤害?或者是否有一些最佳实践来限制JavaScripts的暴露以及它们包含的所有信息?

javascript security jquery

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

MySQL用户变量和SUM函数

我正在尝试在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函数的结果覆盖.有没有什么办法解决这一问题?

mysql

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

使用MySQL从URL获取域到GROUP BY

我有一个充满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吗?

mysql

4
推荐指数
2
解决办法
3128
查看次数