小编Kal*_*sin的帖子

如何使用PDO和SQL Server获取最后一个INSERTed行的ID?

在其他情况下,我可能会被诱惑使用

$result = mssql_query("INSERT INTO table (fields) VALUES (data); 
                       SELECT CAST(scope_identity() AS int)");
Run Code Online (Sandbox Code Playgroud)

但由于我将插入用户提交的数据,我想继续使用PDO,它返回一个空数组.

不幸的是,我在Linux服务器上运行PHP并使用dblib与不支持的Microsoft SQL Server连接PDO::lastInsertID().

请帮忙!

更新以包含代码示例

这是我正在使用的代码:col1是一个类型的字段,int identitycol2是datetime一个默认值为的字段getdate().

//  Connect to db with PDO
$pdo = new PDO( 'dblib:host=' . $host . ';dbname=' . $database . ';', $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) );
//  Connect to db with MSSQL
$sql = mssql_connect( $host, $username, $password );
mssql_select_db( $database, $sql );
//  Create SQL statement
$query = "INSERT INTO [table] …
Run Code Online (Sandbox Code Playgroud)

php sql-server pdo sql-server-2000

9
推荐指数
1
解决办法
8767
查看次数

如何更改fputcsv使用的行结尾?

我创建了一个CSV文件供我们的客户使用

$output = fopen('php://output', 'w');
Run Code Online (Sandbox Code Playgroud)

并使用fputcsv()将数据写入客户端下载的CSV文件.

我在Linux上运行PHP,因此很多Windows应用程序都不解释行结尾.

我可以写CSV文件到服务器上的目录,读回并执行str_replace()\n\r\n,但是这似乎解决问题的一个非常笨拙的方法.有没有办法在不创建物理文件的情况下执行转换?

php csv line-endings

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

如何与聚合函数一起选择列?

假设我有一张公司表:

Company
coID | coName | coCSR
Run Code Online (Sandbox Code Playgroud)

coCSR字段是与帐户处理程序表相关的数字ID:

AccountHandler
ahID | ahFirstName | ahLastName
Run Code Online (Sandbox Code Playgroud)

我还有一张订单表:

Order
orID | orCompanyID | orDate | orValue
Run Code Online (Sandbox Code Playgroud)

现在我需要生成的输出结构如下:

Company | Account handler | No. of orders | Total of orders
Run Code Online (Sandbox Code Playgroud)

这是我试过的查询,它产生一个错误:

SELECT coID, coName, ahFirstName+' '+ahLastName AS CSRName, COUNT(orID) AS numOrders, SUM(orValue) AS totalRevenue
FROM Company
LEFT JOIN AccountHandler ON coCSR = ahID
LEFT JOIN Order ON coID = orCompanyID
WHERE coCSR = 8
AND orDate > getdate() - 365
ORDER BY …
Run Code Online (Sandbox Code Playgroud)

sql-server aggregate-functions

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

如何让$ _SESSION更安全?

似乎最受欢迎的思想是随机生成会话ID,在用户登录时重新生成会话ID,并在他们登录时定期为现有用户重新生成会话ID,这只是为了提高安全性.

我正在使用替代解决方案,但我不是一个经验丰富的PHP专家,我担心有一个明显的安全漏洞(或两个......或更多),我可能会失踪.

如果您可以查看以下内容并告诉我它可能会受到什么影响,我会很感激.

该脚本创建一个与用户计算机绑定的会话ID,并始终保持不变.我想在哈希中包含当前日期,但是我们的夜班工作人员会在午夜退出.不是说我会到处听他们的抱怨;)

我确实意识到,如果两个使用相同操作系统和浏览器的用户使用免费WiFi坐在咖啡店,使用IP地址会被滥用,但这是针对内部MIS的,因此每个用户都有自己的静态IP地址.如果他们后来决定让它从网上访问我就麻烦了!但这不是规范的一部分:)

// Set the session ID
$session_hash = md5( $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_HOST'] . $_SERVER['REMOTE_ADDR'] );
// Compare against session ID received from user
if ( session_id() != $session_hash )
{
    session_destroy();
    unset ( $_SESSION );
    session_id( $session_hash );
    session_start();
}
else
{
    // Attempt to load user details from database if $_SESSION['user_ID'] is set.
}
Run Code Online (Sandbox Code Playgroud)

欢迎并赞赏所有建设性意见!

php security session

2
推荐指数
1
解决办法
166
查看次数

我可以根据表中的值返回一个字符串吗?

请考虑以下查询:

SELECT operation, [...] FROM tableName

operation字段将检索1到4之间的整数.我想要做的是根据整数值为SQL查询中的变量赋值operation.

如果由我决定,我会有一个相应的表,其中包含每个操作的名称,在这种情况下,a JOIN将获取操作字符串.不幸的是,我不控制数据库.

我不知道这是否是SQL可以做的事情,我当然可以使用PHP迭代返回的数据来执行此任务,但是如果可能的话,在一次点击中完成所有操作都是有意义的.

sql sql-server-2000

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

如何使用另一个数组中的值作为键从数组中选择值的子集?

这是我的数组$keys:

Array
(
    [0] => 1
    [1] => 3
    [2] => 4
)
Run Code Online (Sandbox Code Playgroud)

我的$values:

Array
(
    [0] => Red
    [1] => Orange
    [2] => Yellow
    [3] => Green
    [4] => Blue
)
Run Code Online (Sandbox Code Playgroud)

我想在$values使用$keysas键中的值时创建一些值的新数组:

Array
(
    [1] => Orange
    [3] => Green
    [4] => Blue
)
Run Code Online (Sandbox Code Playgroud)

显然我foreach可以获得我想要的值,但我想确保我不会忽略过多的PHP数组函数.

我用谷歌搜索了这个问题,然后回答为使用array_combine,这将无法实现所需的输出.

感谢您的帮助:)

php arrays

2
推荐指数
1
解决办法
70
查看次数

使用COUNT(id)作为条件的条件SELECT COUNT(id)?

我只想选择分配给该类别的文章数量大于3的类别ID.

我已经尝试了各种排列并发布了下面的一个,我觉得最清楚地解释了我正在尝试做什么,虽然我有一种感觉我需要使用嵌套的SELECT.我尝试过嵌套的SELECT但没有成功.

SELECT categoryID, COUNT(articleID) AS numArticles 
FROM articles GROUP BY categoryID WHERE numArticles > 3
Run Code Online (Sandbox Code Playgroud)

sql-server count

0
推荐指数
1
解决办法
5186
查看次数