在其他情况下,我可能会被诱惑使用
$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) 我创建了一个CSV文件供我们的客户使用
$output = fopen('php://output', 'w');
Run Code Online (Sandbox Code Playgroud)
并使用fputcsv()将数据写入客户端下载的CSV文件.
我在Linux上运行PHP,因此很多Windows应用程序都不解释行结尾.
我可以写CSV文件到服务器上的目录,读回并执行str_replace()从\n到\r\n,但是这似乎解决问题的一个非常笨拙的方法.有没有办法在不创建物理文件的情况下执行转换?
假设我有一张公司表:
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) 似乎最受欢迎的思想是随机生成会话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)
欢迎并赞赏所有建设性意见!
请考虑以下查询:
SELECT operation, [...] FROM tableName
该operation字段将检索1到4之间的整数.我想要做的是根据整数值为SQL查询中的变量赋值operation.
如果由我决定,我会有一个相应的表,其中包含每个操作的名称,在这种情况下,a JOIN将获取操作字符串.不幸的是,我不控制数据库.
我不知道这是否是SQL可以做的事情,我当然可以使用PHP迭代返回的数据来执行此任务,但是如果可能的话,在一次点击中完成所有操作都是有意义的.
这是我的数组$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,这将无法实现所需的输出.
感谢您的帮助:)
我只想选择分配给该类别的文章数量大于3的类别ID.
我已经尝试了各种排列并发布了下面的一个,我觉得最清楚地解释了我正在尝试做什么,虽然我有一种感觉我需要使用嵌套的SELECT.我尝试过嵌套的SELECT但没有成功.
SELECT categoryID, COUNT(articleID) AS numArticles
FROM articles GROUP BY categoryID WHERE numArticles > 3
Run Code Online (Sandbox Code Playgroud) php ×4
sql-server ×3
arrays ×1
count ×1
csv ×1
line-endings ×1
pdo ×1
security ×1
session ×1
sql ×1