我是PHP的新手,并试图在我的本地网站上设置phpBB.我有一个apache2和php5的股票debian安装.phpBB安装程序运行正常,连接到数据库并创建其所有表没有问题.但是当我尝试打开登录页面时,我得到了一个0字节的响应.
一点点挖掘表明它永远不会超过对mysql_pconnect()的调用.php二进制文件只是退出而没有错误或消息.什么都没有.我尝试运行以下代码:
<?php
$id = @mysql_pconnect('localhost','myusername', 'mypassword', true);
print "id=".$id."\n";
?>
Run Code Online (Sandbox Code Playgroud)
并且"id ="字符串永远不会打印.它什么都不做.我不知道在哪里可以看到发生了什么错误,或者发生了什么.所有我安装的都是使用pear的"mysql"...也许我错过了其他的东西?
这必须是某个地方的路径问题.mysql扩展很好地构建了
/usr/lib/php5/20060613+lfs/mysql.so
Run Code Online (Sandbox Code Playgroud)
回答:
jishi:告诉我"@"运算符会抑制输出,包括错误消息(@echo off,any?)
tomhaigh:必须在php.ini文件中显式启用扩展.将行"extension = mysql.so"添加到php.ini后,以下代码运行正常:
% cat d.php
<?php
ini_set('display_errors', true);
error_reporting(E_ALL | E_NOTICE);
$id = mysql_pconnect('localhost','myusername', 'mypassword', true);
print "id=".$id."\n";
?>
% php -c /etc/php5/apache2/php.ini d.php
id=Resource id #4
Run Code Online (Sandbox Code Playgroud)
喜悦!
我正在更新一长串记录.在我的代码中,一切都按预测运行,直到执行查询.我得到了
'TempUpdatePhysicalCityStateZip'附近的语法不正确
(我的存储过程名称).我已经使用SQL Server Management Studio对其进行了测试,运行正常.所以,我不太确定我错在哪里.下面是我的存储过程和代码:
ALTER PROCEDURE [dbo].[TempUpdateCityStateZip]
@StoreNo nvarchar (11),
@City nvarchar(50),
@State nvarchar(2),
@Zip nvarchar(5)
AS
BEGIN
SET NOCOUNT ON;
UPDATE StoreContact
SET City = @City, State = @State, Zip = @Zip
WHERE StoreNo = @StoreNo
END
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
Dictionary<string, string> CityStateZipList = getCityStateZipList(dbPath);
using (SqlConnection conn = new SqlConnection(dbPath))
{
conn.Open();
SqlCommand cmdUpdate = new SqlCommand("TempUpdateCityStateZip", conn);
foreach (KeyValuePair<string, string> frKeyValue in CityStateZipList)
{
cmdUpdate.Parameters.Clear();
string[] strCityStateZip = frKeyValue.Value.Split(' ');
cmdUpdate.Parameters.AddWithValue("StoreNo", frKeyValue.Key.ToString());
foreach (String i in strCityStateZip) …Run Code Online (Sandbox Code Playgroud) 我缺乏C++经验,或者说我在垃圾收集语言中的早期学习实际上是在刺激我,我在使用C++中的字符串时遇到了问题.
为了说清楚,使用std :: string或equlivents不是一个选项 - 这是char*的所有方式.
所以:我需要做的是非常简单,基本上归结为连接字符串.在运行时我有2个类.
一个类包含基本文件名形式的"类型"信息.
在标题中:
char* mBaseName;
Run Code Online (Sandbox Code Playgroud)
然后,在.cpp中,它加载了从其他地方传入的信息.
mBaseName = attributes->BaseName;
Run Code Online (Sandbox Code Playgroud)
第二类以后缀形式提供基本文件名的版本信息,它是一个静态类,目前实现如下:
static const char* const suffixes[] = {"Version1", "Version", "Version3"}; //etc.
static char* GetSuffix()
{
int i = 0;
//perform checks on some data structures
i = somevalue;
return suffixes[i];
}
Run Code Online (Sandbox Code Playgroud)
然后,在运行时,基类创建它需要的文件名:
void LoadStuff()
{
char* suffix = GetSuffix();
char* nameToUse = new char[50];
sprintf(nameToUse, "%s%s",mBaseName,suffix);
LoadAndSetupData(nameToUse);
}
Run Code Online (Sandbox Code Playgroud)
你可以立即看到问题.nameToUse永远不会被删除,内存泄漏.
后缀是固定列表,但是基本文件名是任意的.创建的名称需要持续超出"LoadStuff()"的末尾,因为不清楚何时以及如何使用它.
我可能担心太多,或者非常愚蠢,但是在其他地方也会发生与LoadStuff()类似的代码,因此需要解决.这令人沮丧,因为我对于看待安全和"非hacky"解决方案的工作方式还不太了解.在C#中,我只想写:
LoadAndSetupData(mBaseName + GetSuffix());
Run Code Online (Sandbox Code Playgroud)
而且不用担心.
任何评论,建议或建议非常感谢.
我调用LoadAndSetupData()的代码的问题是,在某些时候它可能会复制文件名并将其保留在本地,但实际的实例化是异步的,LoadAndSetupData实际上将事物放入队列中,至少在那时,它期望传入的字符串仍然存在.
我不控制这段代码所以我无法更新它的功能.
我有一个公共静态类,我希望有一个ToString()方法.
我已将其定义为公共静态字符串ToString(),但得到以下警告:
'Class.ToString()'隐藏继承的成员'object.ToString()'.要使当前成员覆盖该实现,请添加override关键字.否则添加新关键字.
如果我添加override关键字,我会收到此错误:
静态成员'Class.ToString()'不能标记为覆盖,虚拟或抽象
如何摆脱该警告并让我的静态类具有ToString()方法.
谢谢,
基思
我总是害怕使用DELETE CASCADE,但随着我越来越自信(懒惰:D),我在想它有多糟糕,最好的做法是使用它还是我应该避免它并清理我的外键等老式方式(带存储过程)?
我希望在我的bash提示符之后和Mac上的输出之前有一个空行.它应该看起来像这样:
echo; ls
Run Code Online (Sandbox Code Playgroud)
我可以在我的bash提示符中添加换行符然后返回一行以等待用户输入吗?有什么明显的东西我不见了吗?
我正在尝试使用以下代码删除SQL Server数据库:
SqlCommand command = new SqlCommand("USE MASTER; ALTER DATABASE @database SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE @Database", connection);
command.Parameters.AddWithValue("@database", TestingEnvironment.DatabaseName);
command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
当我执行它时,我收到错误:
'@database'附近的语法不正确.关键字'with'附近的语法不正确.如果此语句是公用表表达式或xmlnamespaces子句,则必须以分号结束前一个语句.'IMMEDIATE'附近的语法不正确.
我究竟做错了什么?
我有一段看起来像这样的代码:
TAxis *axis = 0;
if (dynamic_cast<MonitorObjectH1C*>(obj))
axis = (dynamic_cast<MonitorObjectH1C*>(obj))->GetXaxis();
Run Code Online (Sandbox Code Playgroud)
有时会崩溃:
Thread 1 (Thread -1208658240 (LWP 11400)):
#0 0x0019e7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#1 0x048c67fb in __waitpid_nocancel () from /lib/tls/libc.so.6
#2 0x04870649 in do_system () from /lib/tls/libc.so.6
#3 0x048709c1 in system () from /lib/tls/libc.so.6
#4 0x001848bd in system () from /lib/tls/libpthread.so.0
#5 0x0117a5bb in TUnixSystem::Exec () from /opt/root/lib/libCore.so.5.21
#6 0x01180045 in TUnixSystem::StackTrace () from /opt/root/lib/libCore.so.5.21
#7 0x0117cc8a in TUnixSystem::DispatchSignals ()
from /opt/root/lib/libCore.so.5.21
#8 0x0117cd18 in SigHandler () from /opt/root/lib/libCore.so.5.21 …Run Code Online (Sandbox Code Playgroud) 在Windows中获取临时目录名称的最佳方法是什么?我看到我可以使用GetTempPath和GetTempFileName创建一个临时文件,但有没有相当于Linux/BSD mkdtemp函数来创建一个临时目录?