问:
MSSQL_CONNECT returns nothing - no error but no response either
I have MSSQL and an IIS7 server but would like to write a PHP website that can retrieve data from my database.

I have switched all my mysql_ instances with mssql_, but it simply won't connect when I try:

```<code>$this->connection = mssql_connect(DB_HOST, DB_USER, DB_PASSWORD);
</code>```

I have echo'd out the 3 pieces of data above and all are correct. I cannot echo anything after the line above, it completely kills it.

I have custom error reporting and have even tried taking it off, to no avail - just a blank page:

```<code>set_error_handler("customError");
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
</code>```

Can some one point me in the right direction for setting up IIS to be able to connect through mssql_connect please? I enjoy programming but server config is not my forte!

Here is the mssql block in my php.ini file located: C:\Program Files (x86)\PHP\v5.3

```<code>[MSSQL]
; Allow or prevent persistent links.
mssql.allow_persistent = On

; Maximum number of persistent links.  -1 means no limit.
mssql.max_persistent = -1

; Maximum number of links (persistent+non persistent).  -1 means no limit.
mssql.max_links = -1

; Minimum error severity to display.
mssql.min_error_severity = 10

; Minimum message severity to display.
mssql.min_message_severity = 10

; Compatibility mode with old versions of PHP 3.0.
mssql.compatability_mode = Off

; Connect timeout
;mssql.connect_timeout = 5

; Query timeout
;mssql.timeout = 60

; Valid range 0 - 2147483647.  Default = 4096.
;mssql.textlimit = 4096

; Valid range 0 - 2147483647.  Default = 4096.
;mssql.textsize = 4096

; Limits the number of records in each batch.  0 = all records in one batch.
;mssql.batchsize = 0

; Specify how datetime and datetim4 columns are returned
; On => Returns data converted to SQL server settings
; Off => Returns values as YYYY-MM-DD hh:mm:ss
;mssql.datetimeconvert = On

; Use NT authentication when connecting to the server
mssql.secure_connection = Off

; Specify max number of processes. -1 = library default
; msdlib defaults to 25
; FreeTDS defaults to 4096
;mssql.max_procs = -1

; Specify client character set.
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
;mssql.charset = "ISO-8859-1"
</code>```

Here is my phpinfo(INFO_MODULES)

```    bcmath
BCMath support  enabled

Directive   Local Value Master Value
bcmath.scale    0   0

calendar
Calendar support    enabled

cgi-fcgi
Directive   Local Value Master Value
cgi.check_shebang_line  1   1
cgi.discard_path    0   0
cgi.fix_pathinfo    1   1
cgi.force_redirect  0   0
cgi.nph 0   0
cgi.redirect_status_env no value    no value
cgi.rfc2616_headers 0   0
fastcgi.impersonate 1   1
fastcgi.logging 1   1

com_dotnet
COM support enabled
DCOM support    disabled
.Net support    enabled

Directive   Local Value Master Value
com.allow_dcom  0   0
com.autoregister_casesensitive  1   1
com.autoregister_typelib    0   0
com.autoregister_verbose    0   0
com.code_page   no value    no value
com.typelib_file    no value    no value

Core
PHP Version     5.3.6

Directive   Local Value Master Value
allow_call_time_pass_reference  Off Off
allow_url_fopen On  On
allow_url_include   Off Off
always_populate_raw_post_data   Off Off
arg_separator.input &   &
arg_separator.output    &   &
asp_tags    Off Off
auto_append_file    no value    no value
auto_globals_jit    On  On
auto_prepend_file   no value    no value
browscap    no value    no value
default_charset no value    no value
default_mimetype    text/html   text/html
define_syslog_variables Off Off
disable_classes no value    no value
disable_functions   no value    no value
display_errors  On  On
display_startup_errors  Off Off
doc_root    no value    no value
docref_ext  no value    no value
docref_root no value    no value
enable_dl   Off Off
error_append_string no value    no value
error_log   C:\Windows\temp\php53_errors.log    C:\Windows\temp\php53_errors.log
error_prepend_string    no value    no value
error_reporting 32767   32767
exit_on_timeout Off Off
expose_php  On  On
extension_dir   C:\Program Files (x86)\PHP\v5.3\ext\    C:\Program Files (x86)\PHP\v5.3\ext\
file_uploads    On  On
highlight.bg    #FFFFFF #FFFFFF
highlight.comment   #FF8000 #FF8000
highlight.default   #0000BB #0000BB
highlight.html  #000000 #000000
highlight.keyword   #007700 #007700
highlight.string    #DD0000 #DD0000
html_errors On  On
ignore_repeated_errors  Off Off
ignore_repeated_source  Off Off
ignore_user_abort   Off Off
implicit_flush  Off Off
include_path    .;C:\php\pear   .;C:\php\pear
log_errors  On  On
log_errors_max_len  1024    1024
magic_quotes_gpc    Off Off
magic_quotes_runtime    Off Off
magic_quotes_sybase Off Off
mail.add_x_header   On  On
mail.force_extra_parameters no value    no value
mail.log    no value    no value
max_execution_time  300 300
max_file_uploads    20  20
max_input_nesting_level 64  64
max_input_time  60  60
memory_limit    128M    128M
open_basedir    no value    no value
output_buffering    4096    4096
output_handler  no value    no value
post_max_size   8M  8M
precision   14  14
realpath_cache_size 16K 16K
realpath_cache_ttl  120 120
register_argc_argv  Off Off
register_globals    Off Off
register_long_arrays    Off Off
report_memleaks On  On
report_zend_debug   On  On
request_order   GP  GP
safe_mode   Off Off
safe_mode_exec_dir  no value    no value
safe_mode_gid   Off Off
safe_mode_include_dir   no value    no value
sendmail_from   no value    no value
sendmail_path   no value    no value
serialize_precision 17  17
short_open_tag  Off Off
SMTP    localhost   localhost
smtp_port   25  25
sql.safe_mode   Off Off
track_errors    On  On
unserialize_callback_func   no value    no value
upload_max_filesize 2M  2M
upload_tmp_dir  C:\Windows\temp C:\Windows\temp
user_dir    no value    no value
user_ini.cache_ttl  300 300
user_ini.filename   .user.ini   .user.ini
variables_order GPCS    GPCS
xmlrpc_error_number 0   0
xmlrpc_errors   Off Off
y2k_compliance  On  On
zend.enable_gc  On  On

ctype
ctype functions     enabled

curl
cURL support    enabled
cURL Information    7.21.2
Age     3
Features
AsynchDNS   Yes
Debug   No
GSS-Negotiate   No
IDN     No
IPv6    Yes
Largefile   Yes
NTLM    Yes
SPNEGO  No
SSL     Yes
SSPI    Yes
krb4    No
libz    Yes
CharConv    No
Protocols   dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
Host    i386-pc-win32
SSL Version     OpenSSL/0.9.8r
ZLib Version    1.2.3
libSSH Version  libssh2/1.2.7

date
date/time support   enabled
"Olson" Timezone Database Version   2011.4
Timezone Database   internal
Default timezone    Europe/Minsk

Directive   Local Value Master Value
date.default_latitude   31.7667 31.7667
date.default_longitude  35.2333 35.2333
date.sunrise_zenith 90.583333   90.583333
date.sunset_zenith  90.583333   90.583333
date.timezone   Europe/Minsk    Europe/Minsk

dom
DOM/XML     enabled
DOM/XML API Version     20031129
libxml Version  2.7.7
HTML Support    enabled
XPath Support   enabled
XPointer Support    enabled
Schema Support  enabled
RelaxNG Support     enabled

ereg
Regex Library   Bundled library enabled

exif
EXIF Support    enabled
EXIF Version    1.4 $Id: exif.c 308362 2011-02-15 14:02:26Z pajoye $
Supported EXIF Version  0220
Supported filetypes     JPEG,TIFF

Directive   Local Value Master Value
exif.decode_jis_intel   JIS JIS
exif.decode_jis_motorola    JIS JIS
exif.decode_unicode_intel   UCS-2LE UCS-2LE
exif.decode_unicode_motorola    UCS-2BE UCS-2BE
exif.encode_jis no value    no value
exif.encode_unicode ISO-8859-15 ISO-8859-15

filter
Input Validation and Filtering  enabled
Revision    $Revision: 306939 $

Directive   Local Value Master Value
filter.default  unsafe_raw  unsafe_raw
filter.default_flags    no value    no value

ftp
FTP support     enabled

gd
GD Support  enabled
GD Version  bundled (2.0.34 compatible)
FreeType Support    enabled
FreeType Linkage    with freetype
FreeType Version    2.4.3
GIF Read Support    enabled
GIF Create Support  enabled
JPEG Support    enabled
libJPEG Version     6b
PNG Support     enabled
libPNG Version  1.2.44
WBMP Support    enabled
XBM Support     enabled

Directive   Local Value Master Value
gd.jpeg_ignore_warning  0   0

gettext
GetText Support     enabled

hash
hash support    enabled
Hashing Engines     md2 md4 md5 sha1 sha224 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost adler32 crc32 crc32b salsa10 salsa20 haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5

iconv
iconv support   enabled
iconv implementation    "libiconv"
iconv library version   1.11

Directive   Local Value Master Value
iconv.input_encoding    ISO-8859-1  ISO-8859-1
iconv.internal_encoding ISO-8859-1  ISO-8859-1
iconv.output_encoding   ISO-8859-1  ISO-8859-1

imap
IMAP c-Client Version   2007e
SSL Support     enabled

json
json support    enabled
json version    1.2.1

libxml
libXML support  active
libXML Compiled Version     2.7.7
libXML Loaded Version   20707
libXML streams  enabled

mbstring
Multibyte Support   enabled
Multibyte string engine     libmbfl
HTTP input encoding translation     disabled

mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.

Multibyte (japanese) regex support  enabled
Multibyte regex (oniguruma) version     4.7.1

Directive   Local Value Master Value
mbstring.detect_order   no value    no value
mbstring.encoding_translation   Off Off
mbstring.func_overload  0   0
mbstring.http_input pass    pass
mbstring.http_output    pass    pass
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) ^(text/|application/xhtml\+xml)
mbstring.internal_encoding  no value    no value
mbstring.language   neutral neutral
mbstring.strict_detection   Off Off
mbstring.substitute_character   no value    no value

mcrypt
mcrypt support  enabled
mcrypt_filter support   enabled
Version     2.5.8
Api No  20021217
Supported ciphers   cast-128 gost rijndael-128 twofish cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes arcfour
Supported modes     cbc cfb ctr ecb ncfb nofb ofb stream

Directive   Local Value Master Value
mcrypt.algorithms_dir   no value    no value
mcrypt.modes_dir    no value    no value

mhash
MHASH support   Enabled
MHASH API Version   Emulated Support

mysql
MySQL Support   enabled
Active Persistent Links     0
Active Links    0
Client API version  mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $

Directive   Local Value Master Value
mysql.allow_local_infile    On  On
mysql.allow_persistent  On  On
mysql.connect_timeout   60  60
mysql.default_host  no value    no value
mysql.default_password  no value    no value
mysql.default_port  no value    no value
mysql.default_socket    no value    no value
mysql.default_user  no value    no value
mysql.max_links Unlimited   Unlimited
mysql.max_persistent    Unlimited   Unlimited
mysql.trace_mode    Off Off

mysqli
MysqlI Support  enabled
Client API library version  mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
Active Persistent Links     0
Inactive Persistent Links   0
Active Links    0

Directive   Local Value Master Value
mysqli.allow_local_infile   On  On
mysqli.allow_persistent On  On
mysqli.default_host no value    no value
mysqli.default_port 3306    3306
mysqli.default_pw   no value    no value
mysqli.default_socket   no value    no value
mysqli.default_user no value    no value
mysqli.max_links    Unlimited   Unlimited
mysqli.max_persistent   Unlimited   Unlimited
mysqli.reconnect    Off Off

mysqlnd
mysqlnd enabled
Version     mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
Compression     supported
SSL     supported
Command buffer size     4096
Read buffer size    32768
Read timeout    31536000
Collecting statistics   Yes
Collecting memory statistics    No
Tracing     n/a

Client statistics
bytes_sent  0
bytes_received  0
packets_sent    0
packets_received    0
protocol_overhead_in    0
protocol_overhead_out   0
bytes_received_ok_packet    0
bytes_received_eof_packet   0
bytes_received_rset_header_packet   0
bytes_received_rset_field_meta_packet   0
bytes_received_rset_row_packet  0
bytes_received_prepare_response_packet  0
bytes_received_change_user_packet   0
packets_sent_command    0
packets_received_ok     0
packets_received_eof    0
packets_received_rset_header    0
packets_received_rset_field_meta    0
packets_received_rset_row   0
packets_received_prepare_response   0
packets_received_change_user    0
result_set_queries  0
non_result_set_queries  0
no_index_used   0
bad_index_used  0
slow_queries    0
buffered_sets   0
unbuffered_sets     0
ps_buffered_sets    0
ps_unbuffered_sets  0
flushed_normal_sets     0
flushed_ps_sets     0
ps_prepared_never_executed  0
ps_prepared_once_executed   0
rows_fetched_from_server_normal     0
rows_fetched_from_server_ps     0
rows_buffered_from_client_normal    0
rows_buffered_from_client_ps    0
rows_fetched_from_client_normal_buffered    0
rows_fetched_from_client_normal_unbuffered  0
rows_fetched_from_client_ps_buffered    0
rows_fetched_from_client_ps_unbuffered  0
rows_fetched_from_client_ps_cursor  0
rows_affected_normal    0
rows_affected_ps    0
rows_skipped_normal     0
rows_skipped_ps     0
copy_on_write_saved     0
copy_on_write_performed     0
command_buffer_too_small    0
connect_success     0
connect_failure     0
connection_reused   0
reconnect   0
pconnect_success    0
active_connections  0
active_persistent_connections   0
explicit_close  0
implicit_close  0
disconnect_close    0
in_middle_of_command_close  0
explicit_free_result    0
implicit_free_result    0
explicit_stmt_close     0
implicit_stmt_close     0
mem_emalloc_count   0
mem_emalloc_amount  0
mem_ecalloc_count   0
mem_ecalloc_amount  0
mem_erealloc_count  0
mem_erealloc_amount     0
mem_efree_count     0
mem_efree_amount    0
mem_malloc_count    0
mem_malloc_amount   0
mem_calloc_count    0
mem_calloc_amount   0
mem_realloc_count   0
mem_realloc_amount  0
mem_free_count  0
mem_free_amount     0
mem_estrndup_count  0
mem_strndup_count   0
mem_estndup_count   0
mem_strdup_count    0
proto_text_fetched_null     0
proto_text_fetched_bit  0
proto_text_fetched_tinyint  0
proto_text_fetched_short    0
proto_text_fetched_int24    0
proto_text_fetched_int  0
proto_text_fetched_bigint   0
proto_text_fetched_decimal  0
proto_text_fetched_float    0
proto_text_fetched_double   0
proto_text_fetched_date     0
proto_text_fetched_year     0
proto_text_fetched_time     0
proto_text_fetched_datetime     0
proto_text_fetched_timestamp    0
proto_text_fetched_string   0
proto_text_fetched_blob     0
proto_text_fetched_enum     0
proto_text_fetched_set  0
proto_text_fetched_geometry     0
proto_text_fetched_other    0
proto_binary_fetched_null   0
proto_binary_fetched_bit    0
proto_binary_fetched_tinyint    0
proto_binary_fetched_short  0
proto_binary_fetched_int24  0
proto_binary_fetched_int    0
proto_binary_fetched_bigint     0
proto_binary_fetched_decimal    0
proto_binary_fetched_float  0
proto_binary_fetched_double     0
proto_binary_fetched_date   0
proto_binary_fetched_year   0
proto_binary_fetched_time   0
proto_binary_fetched_datetime   0
proto_binary_fetched_timestamp  0
proto_binary_fetched_string     0
proto_binary_fetched_blob   0
proto_binary_fetched_enum   0
proto_binary_fetched_set    0
proto_binary_fetched_geometry   0
proto_binary_fetched_other  0
init_command_executed_count     0
init_command_failed_count   0
com_quit    0
com_init_db     0
com_query   0
com_field_list  0
com_create_db   0
com_drop_db     0
com_refresh     0
com_shutdown    0
com_statistics  0
com_process_info    0
com_connect     0
com_process_kill    0
com_debug   0
com_ping    0
com_time    0
com_delayed_insert  0
com_change_user     0
com_binlog_dump     0
com_table_dump  0
com_connect_out     0
com_register_slave  0
com_stmt_prepare    0
com_stmt_execute    0
com_stmt_send_long_data     0
com_stmt_close  0
com_stmt_reset  0
com_stmt_set_option     0
com_stmt_fetch  0
com_deamon  0
bytes_received_real_data_normal     0
bytes_received_real_data_ps     0

odbc
ODBC Support    enabled
Active Persistent Links     0
Active Links    0
ODBC library    Win32

Directive   Local Value Master Value
odbc.allow_persistent   On  On
odbc.check_persistent   On  On
odbc.default_cursortype Static cursor   Static cursor
odbc.default_db no value    no value
odbc.default_pw no value    no value
odbc.default_user   no value    no value
odbc.defaultbinmode return as is    return as is
odbc.defaultlrl return up to 4096 bytes return up to 4096 bytes
odbc.max_links  Unlimited   Unlimited
odbc.max_persistent Unlimited   Unlimited

openssl
OpenSSL support     enabled
OpenSSL Library Version     OpenSSL 0.9.8r 8 Feb 2011
OpenSSL Header Version  OpenSSL 0.9.8r 8 Feb 2011

pcre
PCRE (Perl Compatible Regular Expressions) Support  enabled
PCRE Library Version    8.11 2010-12-10

Directive   Local Value Master Value
pcre.backtrack_limit    100000  100000
pcre.recursion_limit    100000  100000

PDO
PDO support enabled
PDO drivers     mysql, sqlite

pdo_mysql
PDO Driver for MySQL    enabled
Client API version  mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $

pdo_sqlite
PDO Driver for SQLite 3.x   enabled
SQLite Library  3.7.4

Phar
Phar: PHP Archive support   enabled
Phar EXT version    2.0.1
Phar API version    1.1.1
SVN revision    $Revision: 307915 $
Phar-based phar archives    enabled
Tar-based phar archives     enabled
ZIP-based phar archives     enabled
gzip compression    enabled
bzip2 compression   disabled (install pecl/bz2)
OpenSSL support     enabled

Phar based on pear/PHP_Archive, original concept by Davey Shafik.
Phar fully realized by Gregory Beaver and Marcus Boerger.
Portions of tar implementation Copyright (c) 2003-2009 Tim Kientzle.

Directive   Local Value Master Value
phar.cache_list no value    no value
phar.readonly   On  On
phar.require_hash   On  On

Reflection
Reflection  enabled
Version     $Revision: 307971 $

session
Session Support     enabled
Registered save handlers    files user
Registered serializer handlers  php php_binary wddx

Directive   Local Value Master Value
session.auto_start  Off Off
session.bug_compat_42   Off Off
session.bug_compat_warn Off Off
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 5   5
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   C:\Windows\temp C:\Windows\temp
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    On  On
session.use_trans_sid   0   0

SimpleXML
Simplexml support   enabled
Revision    $Revision: 308262 $
Schema support  enabled

soap
Soap Client     enabled
Soap Server     enabled

Directive   Local Value Master Value
soap.wsdl_cache 1   1
soap.wsdl_cache_dir /tmp    /tmp
soap.wsdl_cache_enabled 1   1
soap.wsdl_cache_limit   5   5
soap.wsdl_cache_ttl 86400   86400

SPL
SPL support enabled
Interfaces  Countable, OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
Classes     AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException

standard
Dynamic Library Support     enabled
Internal Sendmail Support for Windows   enabled

Directive   Local Value Master Value
assert.active   1   1
assert.bail 0   0
assert.callback no value    no value
assert.quiet_eval   0   0
assert.warning  1   1
auto_detect_line_endings    0   0
default_socket_timeout  60  60
from    no value    no value
safe_mode_allowed_env_vars  PHP_    PHP_
safe_mode_protected_env_vars    LD_LIBRARY_PATH LD_LIBRARY_PATH
url_rewriter.tags   a=href,area=href,frame=src,input=src,form=fakeentry a=href,area=href,frame=src,input=src,form=fakeentry
user_agent  no value    no value

tidy
Tidy support    enabled
libTidy Release     25 March 2009
Extension Version   2.0 ($Id: tidy.c 306939 2011-01-01 02:19:59Z felipe $)

Directive   Local Value Master Value
tidy.clean_output   no value    no value
tidy.default_config no value    no value

tokenizer
Tokenizer Support   enabled

wddx
WDDX Support    enabled
WDDX Session Serializer     enabled

xml
XML Support     active
XML Namespace Support   active
libxml2 Version     2.7.7

xmlreader
XMLReader   enabled

xmlrpc
core library version    xmlrpc-epi v. 0.51
php extension version   0.51
author  Dan Libby
homepage    http://xmlrpc-epi.sourceforge.net
open sourced by     Epinions.com

xmlwriter
XMLWriter   enabled

zip
Zip     enabled
Extension Version   $Id: php_zip.c 308107 2011-02-07 16:20:16Z pajoye $
Zip version     1.9.1
Libzip version  0.9.0

zlib
ZLib Support    enabled
Stream Wrapper support  compress.zlib://
Stream Filter support   zlib.inflate, zlib.deflate
Compiled Version    1.2.5
Linked Version  1.2.5

Directive   Local Value Master Value
zlib.output_compression Off Off
zlib.output_compression_level   -1  -1
zlib.output_handler no value    no value

Additional Modules
Module Name

1
```

答:
If you used an MSI to install PHP, the error messages probably live in C:\Windows\Temp\php-errors.log. I suspect your error message will be in their.

If you want to configure PHP on IIS, I suggest you install PHP Manager for IIS. This will let you see what modules are installed, and add new ones, and exposes a GUI for all your PHP settings. In addition it will detect things that are wrong with your php.ini. It also has a "just open php.ini in notepad" link.

Body:
I have MSSQL and an IIS7 server but would like to write a PHP website that can retrieve data from my database.

I have switched all my mysql_ instances with mssql_, but it simply won't connect when I try:

$this->connection = mssql_connect(DB_HOST, DB_USER, DB_PASSWORD);

I have echo'd out the 3 pieces of data above and all are correct. I cannot echo anything after the line above, it completely kills it.

I have custom error reporting and have even tried taking it off, to no avail - just a blank page:

set_error_handler("customError");
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

Can some one point me in the right direction for setting up IIS to be able to connect through mssql_connect please? I enjoy programming but server config is not my forte!

Here is the mssql block in my php.ini file located: C:\Program Files (x86)\PHP\v5.3

[MSSQL]
; Allow or prevent persistent links.
mssql.allow_persistent = On

; Maximum number of persistent links.  -1 means no limit.
mssql.max_persistent = -1

; Maximum number of links (persistent+non persistent).  -1 means no limit.
mssql.max_links = -1

; Minimum error severity to display.
mssql.min_error_severity = 10

; Minimum message severity to display.
mssql.min_message_severity = 10

; Compatibility mode with old versions of PHP 3.0.
mssql.compatability_mode = Off

; Connect timeout
;mssql.connect_timeout = 5

; Query timeout
;mssql.timeout = 60

; Valid range 0 - 2147483647.  Default = 4096.
;mssql.textlimit = 4096

; Valid range 0 - 2147483647.  Default = 4096.
;mssql.textsize = 4096

; Limits the number of records in each batch.  0 = all records in one batch.
;mssql.batchsize = 0

; Specify how datetime and datetim4 columns are returned
; On => Returns data converted to SQL server settings
; Off => Returns values as YYYY-MM-DD hh:mm:ss
;mssql.datetimeconvert = On

; Use NT authentication when connecting to the server
mssql.secure_connection = Off

; Specify max number of processes. -1 = library default
; msdlib defaults to 25
; FreeTDS defaults to 4096
;mssql.max_procs = -1

; Specify client character set.
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
;mssql.charset = "ISO-8859-1"

Here is my phpinfo(INFO_MODULES)

    bcmath
BCMath support  enabled

Directive   Local Value Master Value
bcmath.scale    0   0

calendar
Calendar support    enabled

cgi-fcgi
Directive   Local Value Master Value
cgi.check_shebang_line  1   1
cgi.discard_path    0   0
cgi.fix_pathinfo    1   1
cgi.force_redirect  0   0
cgi.nph 0   0
cgi.redirect_status_env no value    no value
cgi.rfc2616_headers 0   0
fastcgi.impersonate 1   1
fastcgi.logging 1   1

com_dotnet
COM support enabled
DCOM support    disabled
.Net support    enabled

Directive   Local Value Master Value
com.allow_dcom  0   0
com.autoregister_casesensitive  1   1
com.autoregister_typelib    0   0
com.autoregister_verbose    0   0
com.code_page   no value    no value
com.typelib_file    no value    no value

Core
PHP Version     5.3.6

Directive   Local Value Master Value
allow_call_time_pass_reference  Off Off
allow_url_fopen On  On
allow_url_include   Off Off
always_populate_raw_post_data   Off Off
arg_separator.input &   &
arg_separator.output    &   &
asp_tags    Off Off
auto_append_file    no value    no value
auto_globals_jit    On  On
auto_prepend_file   no value    no value
browscap    no value    no value
default_charset no value    no value
default_mimetype    text/html   text/html
define_syslog_variables Off Off
disable_classes no value    no value
disable_functions   no value    no value
display_errors  On  On
display_startup_errors  Off Off
doc_root    no value    no value
docref_ext  no value    no value
docref_root no value    no value
enable_dl   Off Off
error_append_string no value    no value
error_log   C:\Windows\temp\php53_errors.log    C:\Windows\temp\php53_errors.log
error_prepend_string    no value    no value
error_reporting 32767   32767
exit_on_timeout Off Off
expose_php  On  On
extension_dir   C:\Program Files (x86)\PHP\v5.3\ext\    C:\Program Files (x86)\PHP\v5.3\ext\
file_uploads    On  On
highlight.bg    #FFFFFF #FFFFFF
highlight.comment   #FF8000 #FF8000
highlight.default   #0000BB #0000BB
highlight.html  #000000 #000000
highlight.keyword   #007700 #007700
highlight.string    #DD0000 #DD0000
html_errors On  On
ignore_repeated_errors  Off Off
ignore_repeated_source  Off Off
ignore_user_abort   Off Off
implicit_flush  Off Off
include_path    .;C:\php\pear   .;C:\php\pear
log_errors  On  On
log_errors_max_len  1024    1024
magic_quotes_gpc    Off Off
magic_quotes_runtime    Off Off
magic_quotes_sybase Off Off
mail.add_x_header   On  On
mail.force_extra_parameters no value    no value
mail.log    no value    no value
max_execution_time  300 300
max_file_uploads    20  20
max_input_nesting_level 64  64
max_input_time  60  60
memory_limit    128M    128M
open_basedir    no value    no value
output_buffering    4096    4096
output_handler  no value    no value
post_max_size   8M  8M
precision   14  14
realpath_cache_size 16K 16K
realpath_cache_ttl  120 120
register_argc_argv  Off Off
register_globals    Off Off
register_long_arrays    Off Off
report_memleaks On  On
report_zend_debug   On  On
request_order   GP  GP
safe_mode   Off Off
safe_mode_exec_dir  no value    no value
safe_mode_gid   Off Off
safe_mode_include_dir   no value    no value
sendmail_from   no value    no value
sendmail_path   no value    no value
serialize_precision 17  17
short_open_tag  Off Off
SMTP    localhost   localhost
smtp_port   25  25
sql.safe_mode   Off Off
track_errors    On  On
unserialize_callback_func   no value    no value
upload_max_filesize 2M  2M
upload_tmp_dir  C:\Windows\temp C:\Windows\temp
user_dir    no value    no value
user_ini.cache_ttl  300 300
user_ini.filename   .user.ini   .user.ini
variables_order GPCS    GPCS
xmlrpc_error_number 0   0
xmlrpc_errors   Off Off
y2k_compliance  On  On
zend.enable_gc  On  On

ctype
ctype functions     enabled

curl
cURL support    enabled
cURL Information    7.21.2
Age     3
Features
AsynchDNS   Yes
Debug   No
GSS-Negotiate   No
IDN     No
IPv6    Yes
Largefile   Yes
NTLM    Yes
SPNEGO  No
SSL     Yes
SSPI    Yes
krb4    No
libz    Yes
CharConv    No
Protocols   dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
Host    i386-pc-win32
SSL Version     OpenSSL/0.9.8r
ZLib Version    1.2.3
libSSH Version  libssh2/1.2.7

date
date/time support   enabled
"Olson" Timezone Database Version   2011.4
Timezone Database   internal
Default timezone    Europe/Minsk

Directive   Local Value Master Value
date.default_latitude   31.7667 31.7667
date.default_longitude  35.2333 35.2333
date.sunrise_zenith 90.583333   90.583333
date.sunset_zenith  90.583333   90.583333
date.timezone   Europe/Minsk    Europe/Minsk

dom
DOM/XML     enabled
DOM/XML API Version     20031129
libxml Version  2.7.7
HTML Support    enabled
XPath Support   enabled
XPointer Support    enabled
Schema Support  enabled
RelaxNG Support     enabled

ereg
Regex Library   Bundled library enabled

exif
EXIF Support    enabled
EXIF Version    1.4 $Id: exif.c 308362 2011-02-15 14:02:26Z pajoye $
Supported EXIF Version  0220
Supported filetypes     JPEG,TIFF

Directive   Local Value Master Value
exif.decode_jis_intel   JIS JIS
exif.decode_jis_motorola    JIS JIS
exif.decode_unicode_intel   UCS-2LE UCS-2LE
exif.decode_unicode_motorola    UCS-2BE UCS-2BE
exif.encode_jis no value    no value
exif.encode_unicode ISO-8859-15 ISO-8859-15

filter
Input Validation and Filtering  enabled
Revision    $Revision: 306939 $

Directive   Local Value Master Value
filter.default  unsafe_raw  unsafe_raw
filter.default_flags    no value    no value

ftp
FTP support     enabled

gd
GD Support  enabled
GD Version  bundled (2.0.34 compatible)
FreeType Support    enabled
FreeType Linkage    with freetype
FreeType Version    2.4.3
GIF Read Support    enabled
GIF Create Support  enabled
JPEG Support    enabled
libJPEG Version     6b
PNG Support     enabled
libPNG Version  1.2.44
WBMP Support    enabled
XBM Support     enabled

Directive   Local Value Master Value
gd.jpeg_ignore_warning  0   0

gettext
GetText Support     enabled

hash
hash support    enabled
Hashing Engines     md2 md4 md5 sha1 sha224 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost adler32 crc32 crc32b salsa10 salsa20 haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5

iconv
iconv support   enabled
iconv implementation    "libiconv"
iconv library version   1.11

Directive   Local Value Master Value
iconv.input_encoding    ISO-8859-1  ISO-8859-1
iconv.internal_encoding ISO-8859-1  ISO-8859-1
iconv.output_encoding   ISO-8859-1  ISO-8859-1

imap
IMAP c-Client Version   2007e
SSL Support     enabled

json
json support    enabled
json version    1.2.1

libxml
libXML support  active
libXML Compiled Version     2.7.7
libXML Loaded Version   20707
libXML streams  enabled

mbstring
Multibyte Support   enabled
Multibyte string engine     libmbfl
HTTP input encoding translation     disabled

mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.

Multibyte (japanese) regex support  enabled
Multibyte regex (oniguruma) version     4.7.1

Directive   Local Value Master Value
mbstring.detect_order   no value    no value
mbstring.encoding_translation   Off Off
mbstring.func_overload  0   0
mbstring.http_input pass    pass
mbstring.http_output    pass    pass
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) ^(text/|application/xhtml\+xml)
mbstring.internal_encoding  no value    no value
mbstring.language   neutral neutral
mbstring.strict_detection   Off Off
mbstring.substitute_character   no value    no value

mcrypt
mcrypt support  enabled
mcrypt_filter support   enabled
Version     2.5.8
Api No  20021217
Supported ciphers   cast-128 gost rijndael-128 twofish cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes arcfour
Supported modes     cbc cfb ctr ecb ncfb nofb ofb stream

Directive   Local Value Master Value
mcrypt.algorithms_dir   no value    no value
mcrypt.modes_dir    no value    no value

mhash
MHASH support   Enabled
MHASH API Version   Emulated Support

mysql
MySQL Support   enabled
Active Persistent Links     0
Active Links    0
Client API version  mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $

Directive   Local Value Master Value
mysql.allow_local_infile    On  On
mysql.allow_persistent  On  On
mysql.connect_timeout   60  60
mysql.default_host  no value    no value
mysql.default_password  no value    no value
mysql.default_port  no value    no value
mysql.default_socket    no value    no value
mysql.default_user  no value    no value
mysql.max_links Unlimited   Unlimited
mysql.max_persistent    Unlimited   Unlimited
mysql.trace_mode    Off Off

mysqli
MysqlI Support  enabled
Client API library version  mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
Active Persistent Links     0
Inactive Persistent Links   0
Active Links    0

Directive   Local Value Master Value
mysqli.allow_local_infile   On  On
mysqli.allow_persistent On  On
mysqli.default_host no value    no value
mysqli.default_port 3306    3306
mysqli.default_pw   no value    no value
mysqli.default_socket   no value    no value
mysqli.default_user no value    no value
mysqli.max_links    Unlimited   Unlimited
mysqli.max_persistent   Unlimited   Unlimited
mysqli.reconnect    Off Off

mysqlnd
mysqlnd enabled
Version     mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
Compression     supported
SSL     supported
Command buffer size     4096
Read buffer size    32768
Read timeout    31536000
Collecting statistics   Yes
Collecting memory statistics    No
Tracing     n/a

Client statistics
bytes_sent  0
bytes_received  0
packets_sent    0
packets_received    0
protocol_overhead_in    0
protocol_overhead_out   0
bytes_received_ok_packet    0
bytes_received_eof_packet   0
bytes_received_rset_header_packet   0
bytes_received_rset_field_meta_packet   0
bytes_received_rset_row_packet  0
bytes_received_prepare_response_packet  0
bytes_received_change_user_packet   0
packets_sent_command    0
packets_received_ok     0
packets_received_eof    0
packets_received_rset_header    0
packets_received_rset_field_meta    0
packets_received_rset_row   0
packets_received_prepare_response   0
packets_received_change_user    0
result_set_queries  0
non_result_set_queries  0
no_index_used   0
bad_index_used  0
slow_queries    0
buffered_sets   0
unbuffered_sets     0
ps_buffered_sets    0
ps_unbuffered_sets  0
flushed_normal_sets     0
flushed_ps_sets     0
ps_prepared_never_executed  0
ps_prepared_once_executed   0
rows_fetched_from_server_normal     0
rows_fetched_from_server_ps     0
rows_buffered_from_client_normal    0
rows_buffered_from_client_ps    0
rows_fetched_from_client_normal_buffered    0
rows_fetched_from_client_normal_unbuffered  0
rows_fetched_from_client_ps_buffered    0
rows_fetched_from_client_ps_unbuffered  0
rows_fetched_from_client_ps_cursor  0
rows_affected_normal    0
rows_affected_ps    0
rows_skipped_normal     0
rows_skipped_ps     0
copy_on_write_saved     0
copy_on_write_performed     0
command_buffer_too_small    0
connect_success     0
connect_failure     0
connection_reused   0
reconnect   0
pconnect_success    0
active_connections  0
active_persistent_connections   0
explicit_close  0
implicit_close  0
disconnect_close    0
in_middle_of_command_close  0
explicit_free_result    0
implicit_free_result    0
explicit_stmt_close     0
implicit_stmt_close     0
mem_emalloc_count   0
mem_emalloc_amount  0
mem_ecalloc_count   0
mem_ecalloc_amount  0
mem_erealloc_count  0
mem_erealloc_amount     0
mem_efree_count     0
mem_efree_amount    0
mem_malloc_count    0
mem_malloc_amount   0
mem_calloc_count    0
mem_calloc_amount   0
mem_realloc_count   0
mem_realloc_amount  0
mem_free_count  0
mem_free_amount     0
mem_estrndup_count  0
mem_strndup_count   0
mem_estndup_count   0
mem_strdup_count    0
proto_text_fetched_null     0
proto_text_fetched_bit  0
proto_text_fetched_tinyint  0
proto_text_fetched_short    0
proto_text_fetched_int24    0
proto_text_fetched_int  0
proto_text_fetched_bigint   0
proto_text_fetched_decimal  0
proto_text_fetched_float    0
proto_text_fetched_double   0
proto_text_fetched_date     0
proto_text_fetched_year     0
proto_text_fetched_time     0
proto_text_fetched_datetime     0
proto_text_fetched_timestamp    0
proto_text_fetched_string   0
proto_text_fetched_blob     0
proto_text_fetched_enum     0
proto_text_fetched_set  0
proto_text_fetched_geometry     0
proto_text_fetched_other    0
proto_binary_fetched_null   0
proto_binary_fetched_bit    0
proto_binary_fetched_tinyint    0
proto_binary_fetched_short  0
proto_binary_fetched_int24  0
proto_binary_fetched_int    0
proto_binary_fetched_bigint     0
proto_binary_fetched_decimal    0
proto_binary_fetched_float  0
proto_binary_fetched_double     0
proto_binary_fetched_date   0
proto_binary_fetched_year   0
proto_binary_fetched_time   0
proto_binary_fetched_datetime   0
proto_binary_fetched_timestamp  0
proto_binary_fetched_string     0
proto_binary_fetched_blob   0
proto_binary_fetched_enum   0
proto_binary_fetched_set    0
proto_binary_fetched_geometry   0
proto_binary_fetched_other  0
init_command_executed_count     0
init_command_failed_count   0
com_quit    0
com_init_db     0
com_query   0
com_field_list  0
com_create_db   0
com_drop_db     0
com_refresh     0
com_shutdown    0
com_statistics  0
com_process_info    0
com_connect     0
com_process_kill    0
com_debug   0
com_ping    0
com_time    0
com_delayed_insert  0
com_change_user     0
com_binlog_dump     0
com_table_dump  0
com_connect_out     0
com_register_slave  0
com_stmt_prepare    0
com_stmt_execute    0
com_stmt_send_long_data     0
com_stmt_close  0
com_stmt_reset  0
com_stmt_set_option     0
com_stmt_fetch  0
com_deamon  0
bytes_received_real_data_normal     0
bytes_received_real_data_ps     0

odbc
ODBC Support    enabled
Active Persistent Links     0
Active Links    0
ODBC library    Win32

Directive   Local Value Master Value
odbc.allow_persistent   On  On
odbc.check_persistent   On  On
odbc.default_cursortype Static cursor   Static cursor
odbc.default_db no value    no value
odbc.default_pw no value    no value
odbc.default_user   no value    no value
odbc.defaultbinmode return as is    return as is
odbc.defaultlrl return up to 4096 bytes return up to 4096 bytes
odbc.max_links  Unlimited   Unlimited
odbc.max_persistent Unlimited   Unlimited

openssl
OpenSSL support     enabled
OpenSSL Library Version     OpenSSL 0.9.8r 8 Feb 2011
OpenSSL Header Version  OpenSSL 0.9.8r 8 Feb 2011

pcre
PCRE (Perl Compatible Regular Expressions) Support  enabled
PCRE Library Version    8.11 2010-12-10

Directive   Local Value Master Value
pcre.backtrack_limit    100000  100000
pcre.recursion_limit    100000  100000

PDO
PDO support enabled
PDO drivers     mysql, sqlite

pdo_mysql
PDO Driver for MySQL    enabled
Client API version  mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $

pdo_sqlite
PDO Driver for SQLite 3.x   enabled
SQLite Library  3.7.4

Phar
Phar: PHP Archive support   enabled
Phar EXT version    2.0.1
Phar API version    1.1.1
SVN revision    $Revision: 307915 $
Phar-based phar archives    enabled
Tar-based phar archives     enabled
ZIP-based phar archives     enabled
gzip compression    enabled
bzip2 compression   disabled (install pecl/bz2)
OpenSSL support     enabled

Phar based on pear/PHP_Archive, original concept by Davey Shafik.
Phar fully realized by Gregory Beaver and Marcus Boerger.
Portions of tar implementation Copyright (c) 2003-2009 Tim Kientzle.

Directive   Local Value Master Value
phar.cache_list no value    no value
phar.readonly   On  On
phar.require_hash   On  On

Reflection
Reflection  enabled
Version     $Revision: 307971 $

session
Session Support     enabled
Registered save handlers    files user
Registered serializer handlers  php php_binary wddx

Directive   Local Value Master Value
session.auto_start  Off Off
session.bug_compat_42   Off Off
session.bug_compat_warn Off Off
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 5   5
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   C:\Windows\temp C:\Windows\temp
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    On  On
session.use_trans_sid   0   0

SimpleXML
Simplexml support   enabled
Revision    $Revision: 308262 $
Schema support  enabled

soap
Soap Client     enabled
Soap Server     enabled

Directive   Local Value Master Value
soap.wsdl_cache 1   1
soap.wsdl_cache_dir /tmp    /tmp
soap.wsdl_cache_enabled 1   1
soap.wsdl_cache_limit   5   5
soap.wsdl_cache_ttl 86400   86400

SPL
SPL support enabled
Interfaces  Countable, OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
Classes     AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException

standard
Dynamic Library Support     enabled
Internal Sendmail Support for Windows   enabled

Directive   Local Value Master Value
assert.active   1   1
assert.bail 0   0
assert.callback no value    no value
assert.quiet_eval   0   0
assert.warning  1   1
auto_detect_line_endings    0   0
default_socket_timeout  60  60
from    no value    no value
safe_mode_allowed_env_vars  PHP_    PHP_
safe_mode_protected_env_vars    LD_LIBRARY_PATH LD_LIBRARY_PATH
url_rewriter.tags   a=href,area=href,frame=src,input=src,form=fakeentry a=href,area=href,frame=src,input=src,form=fakeentry
user_agent  no value    no value

tidy
Tidy support    enabled
libTidy Release     25 March 2009
Extension Version   2.0 ($Id: tidy.c 306939 2011-01-01 02:19:59Z felipe $)

Directive   Local Value Master Value
tidy.clean_output   no value    no value
tidy.default_config no value    no value

tokenizer
Tokenizer Support   enabled

wddx
WDDX Support    enabled
WDDX Session Serializer     enabled

xml
XML Support     active
XML Namespace Support   active
libxml2 Version     2.7.7

xmlreader
XMLReader   enabled

xmlrpc
core library version    xmlrpc-epi v. 0.51
php extension version   0.51
author  Dan Libby
homepage    http://xmlrpc-epi.sourceforge.net
open sourced by     Epinions.com

xmlwriter
XMLWriter   enabled

zip
Zip     enabled
Extension Version   $Id: php_zip.c 308107 2011-02-07 16:20:16Z pajoye $
Zip version     1.9.1
Libzip version  0.9.0

zlib
ZLib Support    enabled
Stream Wrapper support  compress.zlib://
Stream Filter support   zlib.inflate, zlib.deflate
Compiled Version    1.2.5
Linked Version  1.2.5

Directive   Local Value Master Value
zlib.output_compression Off Off
zlib.output_compression_level   -1  -1
zlib.output_handler no value    no value

Additional Modules
Module Name

1


来源: stackexchange

问:
Word split in oracle
i have a table

Create table emp_details(eno number,ename varchar2(22));
```

having values below

eno
ename

1
suresh kumar

2
ram kumar

now i want to split the ename as two columns by using the space.

eno
ename
col1
col2

1
suresh kumar
suresh
kumar

2
ram kumar
ram
kumar

答:
We can use INSTR here for an option using base string options:

SELECT
    eno,
    CASE WHEN INSTR(ename, ' ') > 0
         THEN SUBSTR(ename, 1, INSTR(ename, ' ') - 1)
         ELSE ename END AS col1,
    CASE WHEN INSTR(ename, ' ') > 0
         THEN SUBSTR(ename, INSTR(ename, ' ') + 1) END AS col2
FROM yourTable;
```

Demo

The CASE expressions used above are there to ensure that a one word name gets assigned to the first name only.

ContentLicense: CC BY-SA 4.0

Title: Word split in oracle

Body:
i have a table

Create table emp_details(eno number,ename varchar2(22));

having values below

eno
ename

1
suresh kumar

2
ram kumar

now i want to split the ename as two columns by using the space.

eno
ename
col1
col2

1
suresh kumar
suresh
kumar

2
ram kumar
ram
kumar

Body:
We can use INSTR here for an option using base string options:

SELECT
    eno,
    CASE WHEN INSTR(ename, ' ') > 0
         THEN SUBSTR(ename, 1, INSTR(ename, ' ') - 1)
         ELSE ename END AS col1,
    CASE WHEN INSTR(ename, ' ') > 0
         THEN SUBSTR(ename, INSTR(ename, ' ') + 1) END AS col2
FROM yourTable;

Demo

The CASE expressions used above are there to ensure that a one word name gets assigned to the first name only.


问:
How to listening port in Office (VSTO)?
I wrote a VSTO Add-In for PPT, this extension can send notes to mobile phones in the local area network through websocket service when ppt is playing.

It may be due to security reasons. Port 8080 can only be successfully monitored when ppt is started with administrator privileges. Is there any way to solve it?

```<code>System.Net.HttpListenerException:access denied.
</code>```

答:
Maybe you can try granting permissions to a specific URL.

```<code>netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user
</code>```

or

```<code>netsh http add urlacl url=http://+:8008/ user=Everyone listen=yes
</code>```

You can check these posts to find the solution:

HttpListener Access Denied

HttpListenerException "access denied" for non-admins

Title: How to listening port in Office (VSTO)?

Body:
I wrote a VSTO Add-In for PPT, this extension can send notes to mobile phones in the local area network through websocket service when ppt is playing.

It may be due to security reasons. Port 8080 can only be successfully monitored when ppt is started with administrator privileges. Is there any way to solve it?

System.Net.HttpListenerException:access denied.

Body:
Maybe you can try granting permissions to a specific URL.

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

or

netsh http add urlacl url=http://+:8008/ user=Everyone listen=yes

You can check these posts to find the solution:

HttpListener Access Denied

HttpListenerException "access denied" for non-admins


问:
Copy array from one array to another and change values while copying
I have two arrays:

```<code>dataArray1 = [{
"id":1
"addressDetails": {55:1,56:20}
},
{
"id":2
"addressDetails": {55:30,56:10}
}
]
</code>```

Above array contains addressDetails as object.

```<code>  dataArray2= [{
    "id":1
    "addressDetails": [
     {
      "addressId": "55",
      "city":"london",
      "code":1
     },
      {
      "addressId": "56",
      "city":"paris",
      "code":1
     }
    ]
    },
    {
    "id":2
    "addressDetails": [
     {
      "addressId": "55",
      "city":"london",
      "code":0
     },
      {
      "addressId": "56",
      "city":"paris",
      "code":0
     }
    ]
    }
    ]
</code>```

This second array contains arrayDetails as array.

In both the arrays, id and addressId will be same.  On the basis of both these id's I need to replace addressDetails object in dataArray1 by addressDetails array of dataArray2. In this replacement, I need to change value of "code" property of addressDetails array with the right hand side value(value on right side in addressDetailObject) for that particular id and addressId. For example, for Id "1" and addressId "55", in addressDetails object -  "addressDetails": {55:1,56:10}  value is "1", so I need to change value of "code" property in addressDetailsArrays with 1 and copy rest attritubtes as it is. How can I do that?

答:
For this you can run

```<code>let result = array1.map((item) => {
    //code to change item here
    //find address value of array2 based on id and addressId
    //replace the code with the address.code details you found above
});
</code>```

What we are doing here is iterating over items of array1 and returning an updated value for each item.

Body:
I have two arrays:

dataArray1 = [{
"id":1
"addressDetails": {55:1,56:20}
},
{
"id":2
"addressDetails": {55:30,56:10}
}
]

Above array contains addressDetails as object.

  dataArray2= [{
    "id":1
    "addressDetails": [
     {
      "addressId": "55",
      "city":"london",
      "code":1
     },
      {
      "addressId": "56",
      "city":"paris",
      "code":1
     }
    ]
    },
    {
    "id":2
    "addressDetails": [
     {
      "addressId": "55",
      "city":"london",
      "code":0
     },
      {
      "addressId": "56",
      "city":"paris",
      "code":0
     }
    ]
    }
    ]

This second array contains arrayDetails as array.

In both the arrays, id and addressId will be same.  On the basis of both these id's I need to replace addressDetails object in dataArray1 by addressDetails array of dataArray2. In this replacement, I need to change value of "code" property of addressDetails array with the right hand side value(value on right side in addressDetailObject) for that particular id and addressId. For example, for Id "1" and addressId "55", in addressDetails object -  "addressDetails": {55:1,56:10}  value is "1", so I need to change value of "code" property in addressDetailsArrays with 1 and copy rest attritubtes as it is. How can I do that?

Body:
For this you can run

let result = array1.map((item) => {
    //code to change item here
    //find address value of array2 based on id and addressId
    //replace the code with the address.code details you found above
});

What we are doing here is iterating over items of array1 and returning an updated value for each item.


问:
window.focus() doesn't work from setInterval()
I'm struggling to make the code blow work...

Then, I'm wondering why window.focus() and window.blur() methods are not working / only working from input button. They are not working when I call from setInterval().

For example, in the case below, when I push the button in HTML, it makes window at first time, and then focus the window from second time I press the button.

However, I also set setInterval() to make the window focus but it doesn't work. I can see the log on console, so setInterval function works correctly but win.focus() is ignored by somehow.

```<code><head>
...
    <script>
    var win;
    function makePopup(){
        if (!win || win.closed) {
            win = window.open("","","width=200, height=200");
            win.blur();
        }else{
            win.focus();
            console.log("opened");
        }
    }
    setInterval(function(){makePopup();},4000);
    </script>
</head>

<body>
    <input type="button" onclick="makePopup()"/>
</body>
</code>```

So the problems are:

window.blur() doesn't work at all.

window.focus() works only when I call makePopup() from the HTML button and doesn't work from setInterval().

I'm testing in Chrome and Safari with Mac OSX.

If you could give me some suggestion, I really appreciate it.

Thanks in advance.

答:
The browser knows the difference between someone clicking a link to open a pop-up and when it is triggered by a script. In order to prevent malicious activity many browsers prevent scripted pop-ups.

By specifying a URL that is on the same domain as the hosted page, it should work.

ContentLicense: CC BY-SA 3.0

Body:
I'm struggling to make the code blow work...

Then, I'm wondering why window.focus() and window.blur() methods are not working / only working from input button. They are not working when I call from setInterval().

For example, in the case below, when I push the button in HTML, it makes window at first time, and then focus the window from second time I press the button.

However, I also set setInterval() to make the window focus but it doesn't work. I can see the log on console, so setInterval function works correctly but win.focus() is ignored by somehow.

...

    <input type="button" onclick="makePopup()"/>

So the problems are:

window.blur() doesn't work at all.

window.focus() works only when I call makePopup() from the HTML button and doesn't work from setInterval().

I'm testing in Chrome and Safari with Mac OSX.

If you could give me some suggestion, I really appreciate it.

Thanks in advance.


问:
how to properly register Protobuf schema with Schema Registry / Kafka-Rest
I am trying to post a Protobuf schema to the Schema Registry using kafka-rest interface:

```<code>curl -X POST -H "Content-Type: application/vnd.kafka.protobuf.v2+json" \
   -H "Accept: application/vnd.kafka.v2+json" \
   --data '{"value_schema": "syntax=\"proto3\"; message User { string name = 1; }", "records": [{"value": {"name": "testUser"}}]}' \
   "http://localhost:8082/topics/protobuftest"
</code>```

I am getting this error:

```<code>{"error_code":415,"message":"HTTP 415 Unsupported Media Type"}
</code>```

Question: what is the proper way to indicate the media type for this to work?

答:
You need to send it in a JSON envelope, since it is not an avro schema.</p>
```<code>$ curl -X POST -H "content-type: application/json"
http://localhost:8081/subjects/protobuf/versions
-d "{\"schemaType\": \"PROTOBUF\", \"schema\": \"syntax = \\\"proto3\\\";message test { int32 id = 1; }\"}"
</code>```

Body:
I am trying to post a Protobuf schema to the Schema Registry using kafka-rest interface:

curl -X POST -H "Content-Type: application/vnd.kafka.protobuf.v2+json" \
   -H "Accept: application/vnd.kafka.v2+json" \
   --data '{"value_schema": "syntax=\"proto3\"; message User { string name = 1; }", "records": [{"value": {"name": "testUser"}}]}' \
   "http://localhost:8082/topics/protobuftest"

I am getting this error:

{"error_code":415,"message":"HTTP 415 Unsupported Media Type"}

Question: what is the proper way to indicate the media type for this to work?

Body:
You need to send it in a JSON envelope, since it is not an avro schema.

$ curl -X POST -H "content-type: application/json"
http://localhost:8081/subjects/protobuf/versions
-d "{\"schemaType\": \"PROTOBUF\", \"schema\": \"syntax = \\\"proto3\\\";message test { int32 id = 1; }\"}"


问:
Duplicate google form responses to another sheet as value automatically
is there any script or formula that can help me do the data cleaning. For example in the sheet below, https://docs.google.com/spreadsheets/d/1mLZ8TYNpNHVN1Kc8QF80Ns3RX-EXdSz5s9WmHoIS8Pw/edit?usp=sharing, I have "Form responses 1" which capture the data entry from google form and "cleaning data" sheet. I tried to use Arrayformula and Importrange but i cannot edit the data in "Cleaning data" sheet. Currently, I just copy and paste manually to the other sheet.

What I wanna do

Respondent enter data in google form.

Data appear in "Form responses 1" sheet.

Updated data in "Form responses 1" automatically copied and paste in the "Cleaning data" sheet by row.

Thank you!

答:
In your situation, how about the following sample script?

Sample script:

Please copy and paste the following script to the script editor of Google Spreadsheet. And, please install OnSubmit trigger to the function onSubmit. When you use this script, please submit your Google Form. By this, the script of onSubmit is run by firing the OnSubmit trigger.

function onSubmit(e) {
  const range = e.range;
  const srcSheet = range.getSheet();
  const dstSheet = e.source.getSheetByName("Cleaning Data");
  const srcRange = srcSheet.getRange(range.rowStart, 1, 1, srcSheet.getLastColumn());
  const dstRange = dstSheet.getRange(dstSheet.getLastRow() + 1, 1);
  srcRange.copyTo(dstRange, {contentOnly: true});
}
```

Note:

In this script, please don't directly run this function with the script editor. Because this script uses the event object of OnSubmit trigger. When you directly run this script an error like TypeError: Cannot read property 'range' of undefined occurs. Please be careful this.

References:

Installable Triggers

Event Objects

Body:
In your situation, how about the following sample script?

Sample script:

Please copy and paste the following script to the script editor of Google Spreadsheet. And, please install OnSubmit trigger to the function onSubmit. When you use this script, please submit your Google Form. By this, the script of onSubmit is run by firing the OnSubmit trigger.

function onSubmit(e) {
  const range = e.range;
  const srcSheet = range.getSheet();
  const dstSheet = e.source.getSheetByName("Cleaning Data");
  const srcRange = srcSheet.getRange(range.rowStart, 1, 1, srcSheet.getLastColumn());
  const dstRange = dstSheet.getRange(dstSheet.getLastRow() + 1, 1);
  srcRange.copyTo(dstRange, {contentOnly: true});
}

Note:

In this script, please don't directly run this function with the script editor. Because this script uses the event object of OnSubmit trigger. When you directly run this script an error like TypeError: Cannot read property 'range' of undefined occurs. Please be careful this.

References:

Installable Triggers

Event Objects


问:
faster way for moving large amounts data in oracle to external database
I have a java program that compares and moves data from a local Oracle database to an external MS SQL data base hosted by an online vendor.

Currently the program connects to the MS SQL database doing a SELECT * FROM myTABLE and putting the results in a two-dimensional array.  A temp table is then created in Oracle and the data is inserted into the temp table using a for loop:

```<code>for (int ii = 0; ii < arr.length(); ii++){
    query = "insert into myTable_temp values "+values_from_array;
    stmt.executeQuery();
}
</code>```

A MINUS statement is used find the differences:

```<code>query = "select * from ora_table minus select * from myTable_temp";
rs = stmt.executeQuery();
</code>```

and the result is then inserted back into the MS SQL table using a insert_into_mssql() method:

```<code>while (rs.next()){
    query = "insert into myTable values "+ values_from_rs
    insert_into_mssql(query);
}
</code>```

This works fine except a table I am using has 220,000 rows.  So it takes a long time to load the array, insert into temp table, run the minus statement, then insert everything back into the mssql table.

Is there a more efficient way to do this? or a way to make this faster?
(a dblink or any direct connection wont work bc of security restrictions)

答:
Maybe it may help you.

The new addBatch( ) method of Statement allows you to lump multiple update statements as a unit and execute them at once. Call addBatch( ) after you create the statement, and before execution:

```<code>con.setAutoCommit(false); // If some fail, we want to rollback the rest
Statement stmt = con.createStatement(  );

stmt.addBatch(
"INSERT INTO CUSTOMERS VALUES (1, "J Smith", "617 555-1323");
stmt.addBatch(
"INSERT INTO CUSTOMERS VALUES (2, "A Smith", "617 555-1132");
stmt.addBatch(
"INSERT INTO CUSTOMERS VALUES (3, "C Smith", "617 555-1238");
stmt.addBatch(
"INSERT INTO CUSTOMERS VALUES (4, "K Smith", "617 555-7823");

int[] upCounts = stmt.executeBatch(  );
con.commit(  );
</code>```

Notice that we turn transaction auto-commit off before creating the batch.

Body:
I have a java program that compares and moves data from a local Oracle database to an external MS SQL data base hosted by an online vendor.

Currently the program connects to the MS SQL database doing a SELECT * FROM myTABLE and putting the results in a two-dimensional array.  A temp table is then created in Oracle and the data is inserted into the temp table using a for loop:

for (int ii = 0; ii < arr.length(); ii++){
    query = "insert into myTable_temp values "+values_from_array;
    stmt.executeQuery();
}

A MINUS statement is used find the differences:

query = "select * from ora_table minus select * from myTable_temp";
rs = stmt.executeQuery();

and the result is then inserted back into the MS SQL table using a insert_into_mssql() method:

while (rs.next()){
    query = "insert into myTable values "+ values_from_rs
    insert_into_mssql(query);
}

This works fine except a table I am using has 220,000 rows.  So it takes a long time to load the array, insert into temp table, run the minus statement, then insert everything back into the mssql table.

Is there a more efficient way to do this? or a way to make this faster?
(a dblink or any direct connection wont work bc of security restrictions)

Body:
Maybe it may help you.

The new addBatch( ) method of Statement allows you to lump multiple update statements as a unit and execute them at once. Call addBatch( ) after you create the statement, and before execution:

con.setAutoCommit(false); // If some fail, we want to rollback the rest
Statement stmt = con.createStatement(  );

stmt.addBatch(
"INSERT INTO CUSTOMERS VALUES (1, "J Smith", "617 555-1323");
stmt.addBatch(
"INSERT INTO CUSTOMERS VALUES (2, "A Smith", "617 555-1132");
stmt.addBatch(
"INSERT INTO CUSTOMERS VALUES (3, "C Smith", "617 555-1238");
stmt.addBatch(
"INSERT INTO CUSTOMERS VALUES (4, "K Smith", "617 555-7823");

int[] upCounts = stmt.executeBatch(  );
con.commit(  );

Notice that we turn transaction auto-commit off before creating the batch.


问:
How do I output the first character of all strings that are in a list?
For example if I have the list:

['Bob\n', "Joe\n", "Frank\n", "Bill"]

and want to get the output

B

J

F

B

答:
Use a list comprehension:

```<code>inp = ["Bob\n", "Joe\n", "Frank\n", "Bill"]
output = '\n'.join([x[0] for x in inp])
print(output)
</code>```

This prints:

```<code>B
J
F
B
</code>```

Body:
Use a list comprehension:

inp = ["Bob\n", "Joe\n", "Frank\n", "Bill"]
output = '\n'.join([x[0] for x in inp])
print(output)

This prints:

B
J
F
B


答:
use [] operator to print first character of string

```<code>l = ['Bob\n', "Joe\n", "Frank\n", "Bill"]
for s in l:
    print(s[0])
</code>```

output:

```<code>B
J
F
B
</code>```

Title: How do I output the first character of all strings that are in a list?

Body:
For example if I have the list:

['Bob\n', "Joe\n", "Frank\n", "Bill"]

and want to get the output

B

J

F

B

Body:
use [] operator to print first character of string

l = ['Bob\n', "Joe\n", "Frank\n", "Bill"]
for s in l:
    print(s[0])

output:

B
J
F
B


问:
Flink: getRecord() not getting called in AggregateFunction
I am trying to create a TumblingWindow on a stream of continuous data and create aggregates within the window. But for some reason, the getResult() does not get called.

```<code>public class MyAggregator implements AggregateFunction<Event, MyMetrics, MyMetrics> {

    @Override
    public MyMetrics createAccumulator() {
        return new MyMetrics(0L, 0L);
    }

    @Override
    public MyMetrics add(Event value, MyMetrics accumulator) {
        Instant previousValue = ...;
        if (previousValue != null) {
            Long myWay = ...;
            accumulator.setMyWay(myWay);
        }
        return accumulator;
    }

    @Override
    public MyMetrics getResult(MyMetrics accumulator) {
        System.out.println("Inside getResult()");
        return accumulator;
    }

    @Override
    public MyMetrics merge(MyMetrics acc1, MyMetrics acc2) {
        return new MyMetrics(
                acc1.getMyWay() + acc2.getMyWay());
    }
}
</code>```

Note: event.getClientTime() returns an Instant object.

```<code>private WatermarkStrategy getWatermarkStrategy() {
        return WatermarkStrategy
                .<MyEvent>forBoundedOutOfOrderness(Duration.ofMinutes(10))
                .withTimestampAssigner(
                        (event, timestamp) ->
                                event.getClientTime().toEpochMilli()
                );
    }

public static void main(String[] args) {
        DataStream<MyEvent> watermarkedData = actuals
                .assignTimestampsAndWatermarks(
                        getWatermarkStrategy()
                ).name("addWatermark");

        final OutputTag<MyEvent> lateOutputTag = new OutputTag<MyEvent>("late-data"){};

        SingleOutputStreamOperator<OutputModel> output_data = watermarkedData
                .keyBy("input_key")
                .window(TumblingEventTimeWindows.of(Time.hours(1)))
                .sideOutputLateData(lateOutputTag)
                .aggregate(
                        new MyAggregator(),
                ).name("AggregationRollUp");

        output_data.addSink(new PrintSinkFunction<>());

}
</code>```

Any pointers as to what I am missing here would be helpful.

答:
First check the timing of the data to see if it meets the window trigger conditions

Second may be you can do a test by reducing the window size from 1h to 1min and reducing the watermark region from 10min to 30s

Body:
I am trying to create a TumblingWindow on a stream of continuous data and create aggregates within the window. But for some reason, the getResult() does not get called.

public class MyAggregator implements AggregateFunction<Event, MyMetrics, MyMetrics> {

    @Override
    public MyMetrics createAccumulator() {
        return new MyMetrics(0L, 0L);
    }

    @Override
    public MyMetrics add(Event value, MyMetrics accumulator) {
        Instant previousValue = ...;
        if (previousValue != null) {
            Long myWay = ...;
            accumulator.setMyWay(myWay);
        }
        return accumulator;
    }

    @Override
    public MyMetrics getResult(MyMetrics accumulator) {
        System.out.println("Inside getResult()");
        return accumulator;
    }

    @Override
    public MyMetrics merge(MyMetrics acc1, MyMetrics acc2) {
        return new MyMetrics(
                acc1.getMyWay() + acc2.getMyWay());
    }
}

Note: event.getClientTime() returns an Instant object.

private WatermarkStrategy getWatermarkStrategy() {
        return WatermarkStrategy
                .<MyEvent>forBoundedOutOfOrderness(Duration.ofMinutes(10))
                .withTimestampAssigner(
                        (event, timestamp) ->
                                event.getClientTime().toEpochMilli()
                );
    }

public static void main(String[] args) {
        DataStream<MyEvent> watermarkedData = actuals
                .assignTimestampsAndWatermarks(
                        getWatermarkStrategy()
                ).name("addWatermark");

        final OutputTag<MyEvent> lateOutputTag = new OutputTag<MyEvent>("late-data"){};

        SingleOutputStreamOperator<OutputModel> output_data = watermarkedData
                .keyBy("input_key")
                .window(TumblingEventTimeWindows.of(Time.hours(1)))
                .sideOutputLateData(lateOutputTag)
                .aggregate(
                        new MyAggregator(),
                ).name("AggregationRollUp");

        output_data.addSink(new PrintSinkFunction<>());

}

Any pointers as to what I am missing here would be helpful.


问:
Converting multi digit char to int in C++
While I know that you can convert single digits that are characters to integers by doing, for example:

```<code>int main()
{
    char var = '5';
    int num_var = var - 48;
}
</code>```

I know you can't do the same thing for a character with a value which is say, '148'. Is there an easy way to convert this character value to an integer value of 148?

答:
I know you can't do the same thing for a character with a value which is say, '148'. Is there an easy way to convert this character value to an integer value of 148?

Actually, the type of a (narrow) multicharacter literal is already int, so no conversion is needed to change the type (by converting the value to char, you may lose the precise value though since char cannot typically represent all values that int can). But the value of '148' is not necessarily (nor typically) 148, and there's no standard way to convert the value because the value of '148' is implementation defined.

It's of course possible to write a mapping using math for a particular language implementation if you know the mapping based on the documentation of that implementation, but such mapping isn't portable to other language implementations. Furthermore, multi-character literals are only conditionally supported, so a language implementation might not have them at all.

In conclusion: If you think that you need such conversion, then multicharacter literal is not the correct tool for the job.

Body:
While I know that you can convert single digits that are characters to integers by doing, for example:

int main()
{
    char var = '5';
    int num_var = var - 48;
}

I know you can't do the same thing for a character with a value which is say, '148'. Is there an easy way to convert this character value to an integer value of 148?


问:
My if loop is taking effect even when it should not
I am making a random number guessing program where users try to guess a number between 1 and 100 while receiving whether they were higher or lower. one of the stipulations was that there must be a function to quit the program upon the user entering Q or q so I formatted my loop as such:

```<code>$RandomNumber = Get-Random -Minimum 1 -Maximum 101
write-output $RandomNumber
$GuessNumber = 0
While ($RandomNumber -ne $Guess)
{
    $Guess = Read-Host -Prompt 'Guess a number between 1 and 100 Or enter Q to quit'
    if ($Guess -eq 'q' -or 'Q')
    {
        Write-output "Thank you for playing"
        BREAK
    }
    if ($Guess -gt 100 -or $Guess -le 1)
    {
        Write-Output 'Invalid Input please enter a number between 1 and 100'

    }
    if ($Guess -le $RandomNumber)
    {
        Write-output 'Your number is lower than the hidden number please guess again'
        $GuessNumber = $GuessNumber +1
    }
    if ($Guess -gt $RandomNumber)
    {
        Write-output 'Your number is higher than the hidden number please guess again'
        $GuessNumber = $GuessNumber +1
    }
    if ($Guess -eq $RandomNumber)
    {
        $GuessNumber = $GuessNumber +1
        Write-output 'Congratulations you guessed the number in' $GuessNumber 'tries'
    }
}
</code>```

the issue I run into is even when the input is equal to 10 for example it still outputs "Thank you for playing" meaning that if loop has taken effect. I am not sure why this occurs as I'm new to powershell and a reasoning for this happening would be helpful

答:
Replace

```<code>if ($Guess -eq 'q' -or 'Q')
</code>```

with

```<code>if ($Guess -eq 'q' -or $Guess -eq 'Q')
</code>```

Body:
I am making a random number guessing program where users try to guess a number between 1 and 100 while receiving whether they were higher or lower. one of the stipulations was that there must be a function to quit the program upon the user entering Q or q so I formatted my loop as such:

$RandomNumber = Get-Random -Minimum 1 -Maximum 101
write-output $RandomNumber
$GuessNumber = 0
While ($RandomNumber -ne $Guess)
{
    $Guess = Read-Host -Prompt 'Guess a number between 1 and 100 Or enter Q to quit'
    if ($Guess -eq 'q' -or 'Q')
    {
        Write-output "Thank you for playing"
        BREAK
    }
    if ($Guess -gt 100 -or $Guess -le 1)
    {
        Write-Output 'Invalid Input please enter a number between 1 and 100'

    }
    if ($Guess -le $RandomNumber)
    {
        Write-output 'Your number is lower than the hidden number please guess again'
        $GuessNumber = $GuessNumber +1
    }
    if ($Guess -gt $RandomNumber)
    {
        Write-output 'Your number is higher than the hidden number please guess again'
        $GuessNumber = $GuessNumber +1
    }
    if ($Guess -eq $RandomNumber)
    {
        $GuessNumber = $GuessNumber +1
        Write-output 'Congratulations you guessed the number in' $GuessNumber 'tries'
    }
}

the issue I run into is even when the input is equal to 10 for example it still outputs "Thank you for playing" meaning that if loop has taken effect. I am not sure why this occurs as I'm new to powershell and a reasoning for this happening would be helpful

Body:
Replace

if ($Guess -eq 'q' -or 'Q')

with

if ($Guess -eq 'q' -or $Guess -eq 'Q')


问:
Hard file on the server or binary for sound and image files in SQL with ASP.Net application
I am building an ASP.Net C# web application that will be using lots of sound files and image files. Considering performance, would it be best to store all files in SQL as image data type and retrieve from the database or store/archive the hard file on the server and store the path in sql? Im curious about the pros and cons - other than the obvious of storage space and manageability.</p>

答:
My current client is currently looking at the same options. There are a few tradeoffs to consider:

Storing as IMAGE data type:

You only need to backup your database rather than the DB and places on the file system

You don't have to worry about files being moved without the DB being updated with the new location or any other issues with hanging pointers to non-existent files

Storing as a file with a path in the DB:

Slightly faster access (we'll be quantifying this in the next few days)

Originally I thought that there would also be a problem with client-side caching of images. For example, when .NET gets the image out of the DB the client browser can't cache it - it looks like a new image every time. I then learned that unless you are giving users file-level access (a security no-no) you run into the same problem using direct file access.

OwnerDisplayName: Jukeman

ContentLicense: CC BY-SA 2.5

LastEditorDisplayName: Joel Coehoorn

OwnerDisplayName: Tom H.


问:
Visual Studio 2010 Unit Testing - Any way to continue a TestMethod after failed assertion?
I have a test project in visual studio 2010. I have a TestMethod. Inside of this, I want to iterate over a list of things and test each. So, I have 1 test and want to assert N times (once for each item in the list).

However, I don't want to stop if one fails. I want to continue and then report all failures together.

Example:

```<code>[TestMethod]
public void Test()
{
   foreach (item in list)
   {
      // if fail, continue on with the rest
      Assert(if fail, add to output list);
   }

   output_failures_all_at_once;
}
</code>```

答:
I would do something like this:</p>

```<code>// Assert that each item name is fewer than 8 characters.
[TestMethod]
public void Test()
{
   List<string> failures = new List<string>();

   // However you get your list in the first place
   List<Item> itemsToTest = GetItems();

   foreach (Item item in itemsToTest )
   {
      // if fail, continue on with the rest
      if (item.Name.Length > 8 )
      {
         failures.Add(item.Name);
      }
   }

   foreach (string failure in failures)
   {
      Console.WriteLine(failure);
   }

   Assert.AreEqual(0, failures.Count);
}
</code>```

Body:
I have a test project in visual studio 2010. I have a TestMethod. Inside of this, I want to iterate over a list of things and test each. So, I have 1 test and want to assert N times (once for each item in the list).

However, I don't want to stop if one fails. I want to continue and then report all failures together.

Example:

[TestMethod]
public void Test()
{
   foreach (item in list)
   {
      // if fail, continue on with the rest
      Assert(if fail, add to output list);
   }

   output_failures_all_at_once;
}

Body:
I would do something like this:

// Assert that each item name is fewer than 8 characters.
[TestMethod]
public void Test()
{
   List<string> failures = new List<string>();

   // However you get your list in the first place
   List<Item> itemsToTest = GetItems();

   foreach (Item item in itemsToTest )
   {
      // if fail, continue on with the rest
      if (item.Name.Length > 8 )
      {
         failures.Add(item.Name);
      }
   }

   foreach (string failure in failures)
   {
      Console.WriteLine(failure);
   }

   Assert.AreEqual(0, failures.Count);
}


问:
if checks inside a reduce() sum function
I am trying to iterate through an array in typescript, but on occasion, inside the array there will be an empty value or NaN (null) value by default. this really mucks up my sum function, as it is trying to call parseInt() on a null value, so the function also returns NaN. How can I make an if condition inside of this function to check for Number() first otherwise skip/continue ?
I know I can naively have a for each loop, and check for this inside of an if statement, but that is not ideal.</p>
```<code>    sumOwnershipLiabilityPercentages(): number{
        // return the sum of all the percentage ownerships
        return this.liabilitiesOwnershipList.reduce((prev: number, cur: any) => prev + parseInt(cur.percentage), 0);
    }
</code>```

答:
You can make the summation conditional.

```<code>const sum = d.reduce((p: number, c: number) => p += (c) ? c : 0)
</code>```

if you want to make a more elaborate if statements do it like so

```<code>const sum2 = d.reduce((p: number, c: number) => {
   if (c)
      return p += c;
   else
      return p += 0;
   })
</code>```

or, in your case, something like this

```<code>return this.liabilitiesOwnershipList.reduce((prev: number, cur: any) => {
    if (cur && cur?.percentage)
      return prev += parseInt(cur.percentage);
    else
      return prev += 0;
  });
</code>```

Body:
I am trying to iterate through an array in typescript, but on occasion, inside the array there will be an empty value or NaN (null) value by default. this really mucks up my sum function, as it is trying to call parseInt() on a null value, so the function also returns NaN. How can I make an if condition inside of this function to check for Number() first otherwise skip/continue ?
I know I can naively have a for each loop, and check for this inside of an if statement, but that is not ideal.

    sumOwnershipLiabilityPercentages(): number{
        // return the sum of all the percentage ownerships
        return this.liabilitiesOwnershipList.reduce((prev: number, cur: any) => prev + parseInt(cur.percentage), 0);
    }

Body:
You can make the summation conditional.

const sum = d.reduce((p: number, c: number) => p += (c) ? c : 0)

if you want to make a more elaborate if statements do it like so

const sum2 = d.reduce((p: number, c: number) => {
   if (c)
      return p += c;
   else
      return p += 0;
   })

or, in your case, something like this

return this.liabilitiesOwnershipList.reduce((prev: number, cur: any) => {
    if (cur && cur?.percentage)
      return prev += parseInt(cur.percentage);
    else
      return prev += 0;
  });


问:
list changed function names or signatures with git diff (c++)
I'm working on a git diff parser. The main task is to find all changed function signatures. Sometimes in the chunk line with @@@ .... @@@ contains these information but sometimes not.
Last time I changed in greet() cout message and it is visible on first image as changed line and it is correct, but above in @@@... line appears "void functOne() {" and that is not changed.
The second picture is about a dummy cpp source code to test git diff.

The main questions are

How can I list all changed function's signatures?

Why sometimes appears unchanged function name ?

Why sometimes doesn't appears any function name/signature in line with @@@.... ?

答:
Sometimes in the chunk line with @@@ .... @@@

Git calls this a hunk header (after other diff software that also calls it that).

... contains [the function name] but sometimes not.

What Git puts in the function section of a diff hunk header is produced by matching earlier lines against a particular regular expression, as described in the gitattributes documentation under xfuncname (search for that string).  But note that this is a regular expression, and regular expressions are inherently less capable than parsers; there will always exist valid C++ constructs that can be parsed, but not recognized by some regular expression you can write.

If Git's built in C++ xfuncname pattern is not adequate for your use, you can write your own pattern.  But it's always going to be limited because regular expressions can only recognize regular languages (these are CS-theoretical or informatics terms, not to be interpreted as ordinary English language; for more, see, e.g., Regular vs Context Free Grammars).


问:
How to get difference of two lists in Python that do not contain unique elements within the list
If I have the following two lists of tuples in Python:

```<code>A = [('A',10),('B',20),('C',20)]
B = [('A',3),('C',10)]
</code>```

How can I obtain the following list (A-B), which is effectively the difference of A and B (but it needs to preserve count of the difference):

```<code>C = [('A',7),('B',20),('C',10)]
</code>```

Thanks!

答:
The Counter class in the collections module can help you do the kind of thing you have asked about. Documentation is here: https://docs.python.org/3/library/collections.html#collections.Counter

However, there are some design choices that would need to be made in a generalized solution to address your question.

For example, if B contains ('D', 77) in addition to the items in your question, and A has no entry for 'D', then we could either ignore 'D' or treat A as having a zero value for 'D' with the resulting "difference" for 'D' shown as -77.

The - operator for two Counter objects will ignore 'D', whereas the subtract() method for a Counter object will not.

Furthermore, your question specifies output in the form of a list of tuples of string and number. While this spec can be unambiguously met for your example if we replicate the ordering in A, it's less clear what to do if B were to contain an entry such as 'D' in the example above. For example, should 'D' come before 'C' or after it, or is either OK?

UPDATE: As pointed out by @enke in the comments, dict provides the necessary ordering guarantees (as of Python 3.7) to support more condensed logic without explicit iteration in our code.

Here is some code that does exactly what you've asked about, with some further examples illustrating the design considerations above.

```<code>    def counterDifferences():
        A = [('A',10),('B',20),('C',20)]
        B = [('A',3),('C',10)]

        # (1) This does what the question asks how to do, using subtract().
        acount = Counter(dict(A))
        acount.subtract(dict(B))
        C = [*acount.items()] # This works because, as of Python 3.7, dictionary order is guaranteed to be insertion order.
        print(f"C {C}")
        # C [('A', 7), ('B', 20), ('C', 10)]

        A = [('A',10),('B',20),('C',20)]
        B = [('A',3),('C',10),('D',77)]

        # (2) This shows that operator '-' will give the same result even if B contains keys not found in A.
        C = [*(Counter(dict(A)) - Counter(dict(B))).items()]
        print(f"C {C}")
        # C [('A', 7), ('B', 20), ('C', 10)]

        # (3) This shows that subtract() includes keys in B in addition to keys in A.
        dcount = Counter(dict(A))
        dcount.subtract(Counter(dict(B)))
        D = [*dcount.items()]
        print(f"D {D}")
        # D [('A', 7), ('B', 20), ('C', 10), ('D', -77)]
</code>```

Body:
If I have the following two lists of tuples in Python:

A = [('A',10),('B',20),('C',20)]
B = [('A',3),('C',10)]

How can I obtain the following list (A-B), which is effectively the difference of A and B (but it needs to preserve count of the difference):

C = [('A',7),('B',20),('C',10)]

Thanks!

Body:
The Counter class in the collections module can help you do the kind of thing you have asked about. Documentation is here: https://docs.python.org/3/library/collections.html#collections.Counter

However, there are some design choices that would need to be made in a generalized solution to address your question.

For example, if B contains ('D', 77) in addition to the items in your question, and A has no entry for 'D', then we could either ignore 'D' or treat A as having a zero value for 'D' with the resulting "difference" for 'D' shown as -77.

The - operator for two Counter objects will ignore 'D', whereas the subtract() method for a Counter object will not.

Furthermore, your question specifies output in the form of a list of tuples of string and number. While this spec can be unambiguously met for your example if we replicate the ordering in A, it's less clear what to do if B were to contain an entry such as 'D' in the example above. For example, should 'D' come before 'C' or after it, or is either OK?

UPDATE: As pointed out by @enke in the comments, dict provides the necessary ordering guarantees (as of Python 3.7) to support more condensed logic without explicit iteration in our code.

Here is some code that does exactly what you've asked about, with some further examples illustrating the design considerations above.

    def counterDifferences():
        A = [('A',10),('B',20),('C',20)]
        B = [('A',3),('C',10)]

        # (1) This does what the question asks how to do, using subtract().
        acount = Counter(dict(A))
        acount.subtract(dict(B))
        C = [*acount.items()] # This works because, as of Python 3.7, dictionary order is guaranteed to be insertion order.
        print(f"C {C}")
        # C [('A', 7), ('B', 20), ('C', 10)]

        A = [('A',10),('B',20),('C',20)]
        B = [('A',3),('C',10),('D',77)]

        # (2) This shows that operator '-' will give the same result even if B contains keys not found in A.
        C = [*(Counter(dict(A)) - Counter(dict(B))).items()]
        print(f"C {C}")
        # C [('A', 7), ('B', 20), ('C', 10)]

        # (3) This shows that subtract() includes keys in B in addition to keys in A.
        dcount = Counter(dict(A))
        dcount.subtract(Counter(dict(B)))
        D = [*dcount.items()]
        print(f"D {D}")
        # D [('A', 7), ('B', 20), ('C', 10), ('D', -77)]


答: The condition is wrong. $Guess -eq 'q' -or 'Q' returns true always, it should be $Guess -eq 'q' -or $Guess -eq 'Q'.

Title: My if loop is taking effect even when it should not


问:
Is there an easy way to custom fill null values in Pandas?
I have the following DataFrame:

```<code>     A    B    C    D
0  0.0  0.0  0.0  0.0
1  1.0  1.0  1.0  1.0
2  NaN  2.0  2.0  2.0
3  NaN  3.0  3.0  3.0
4  NaN  4.0  4.0  NaN
5  NaN  NaN  5.0  NaN
6  NaN  NaN  6.0  NaN
</code>```

I am working to generate visualizations with this data, and I need to fill the null values in a very specific way. I want to loop the existing values repeatedly for each column until the null values are all filled, so that the DataFrame looks like this:

```<code>     A    B    C    D
0  0.0  0.0  0.0  0.0
1  1.0  1.0  1.0  1.0
2  0.0  2.0  2.0  2.0
3  1.0  3.0  3.0  3.0
4  0.0  4.0  4.0  0.0
5  1.0  0.0  5.0  1.0
6  0.0  1.0  6.0  2.0
</code>```

Is there any convenient way to do this in Pandas?

答:
You can apply a custom function on each column that obtains the values to be iterated and then extends them to the full length of the dataframe. This can be done using np.resize as follows:

```<code>def f(x):
    vals = x[~x.isnull()].values
    vals = np.resize(vals, len(x))
    return vals

df = df.apply(f, axis=0)
</code>```

Result:

```<code>     A    B    C    D
0  0.0  0.0  0.0  0.0
1  1.0  1.0  1.0  1.0
2  0.0  2.0  2.0  2.0
3  1.0  3.0  3.0  3.0
4  0.0  4.0  4.0  0.0
5  1.0  0.0  5.0  1.0
6  0.0  1.0  6.0  2.0
</code>```

Body:
I have the following DataFrame:

     A    B    C    D
0  0.0  0.0  0.0  0.0
1  1.0  1.0  1.0  1.0
2  NaN  2.0  2.0  2.0
3  NaN  3.0  3.0  3.0
4  NaN  4.0  4.0  NaN
5  NaN  NaN  5.0  NaN
6  NaN  NaN  6.0  NaN

I am working to generate visualizations with this data, and I need to fill the null values in a very specific way. I want to loop the existing values repeatedly for each column until the null values are all filled, so that the DataFrame looks like this:

     A    B    C    D
0  0.0  0.0  0.0  0.0
1  1.0  1.0  1.0  1.0
2  0.0  2.0  2.0  2.0
3  1.0  3.0  3.0  3.0
4  0.0  4.0  4.0  0.0
5  1.0  0.0  5.0  1.0
6  0.0  1.0  6.0  2.0

Is there any convenient way to do this in Pandas?

Body:
You can apply a custom function on each column that obtains the values to be iterated and then extends them to the full length of the dataframe. This can be done using np.resize as follows:

def f(x):
    vals = x[~x.isnull()].values
    vals = np.resize(vals, len(x))
    return vals

df = df.apply(f, axis=0)

Result:

     A    B    C    D
0  0.0  0.0  0.0  0.0
1  1.0  1.0  1.0  1.0
2  0.0  2.0  2.0  2.0
3  1.0  3.0  3.0  3.0
4  0.0  4.0  4.0  0.0
5  1.0  0.0  5.0  1.0
6  0.0  1.0  6.0  2.0


问:
PicoCTF General Skills PW Crack Level4
I'm working on the PW Crack Level4 in the PicoCTF General Skills section. I'm very new to python and CTF's in general. The challenge is to find the right pw from the included list of 100 possibles. I could have, by now, simply entered each one, lol, but that's not the point I think. So I am trying to modify the code to iterate through the list of pw's and pass each one to the part of the code that checks it.

That's where I'm stuck. The for loop seems to run through the list without passing each pw to the part of the code that should check it... I feel like the answer is on the tip of my tongue. But I'm too new to see it.

Here's my code

```<code>import hashlib

### THIS FUNCTION WILL NOT HELP YOU FIND THE FLAG --LT ########################
def str_xor(secret, key):
    #extend key to secret length
    new_key = key
    i = 0
    while len(new_key) < len(secret):
        new_key = new_key + key[i]
        i = (i + 1) % len(key)
    return "".join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)])
###############################################################################

flag_enc = open('level4.flag.txt.enc', 'rb').read()
correct_pw_hash = open('level4.hash.bin', 'rb').read()

def hash_pw(pw_str):
    pw_bytes = bytearray()
    pw_bytes.extend(pw_str.encode())
    m = hashlib.md5()
    m.update(pw_bytes)
    return m.digest()

pos_pw_list = ["6288", "6152", "4c7a", "b722", "9a6e", "6717", "4389", "1a28", "37ac", "de4f", "eb28", "351b", "3d58", "948b", "231b", "973a", "a087", "384a", "6d3c", "9065", "725c", "fd60", "4d4f", "6a60", "7213", "93e6", "8c54", "537d", "a1da", "c718", "9de8", "ebe3", "f1c5", "a0bf", "ccab", "4938", "8f97", "3327", "8029", "41f2", "a04f", "c7f9", "b453", "90a5", "25dc", "26b0", "cb42", "de89", "2451", "1dd3", "7f2c", "8919", "f3a9", "b88f", "eaa8", "776a", "6236", "98f5", "492b", "507d", "18e8", "cfb5", "76fd", "6017", "30de", "bbae", "354e", "4013", "3153", "e9cc", "cba9", "25ea", "c06c", "a166", "faf1", "2264", "2179", "cf30", "4b47", "3446", "b213", "88a3", "6253", "db88", "c38c", "a48c", "3e4f", "7208", "9dcb", "fc77", "e2cf", "8552", "f6f8", "7079", "42ef", "391e", "8a6d", "2154", "d964", "49ec"]

def level_4_pw_check():
    for x in pos_pw_list: # for loop to iterate through the pos_pw_list
        user_pw = input(x)
        # print(user_pw) # printing user_pw just to make sure the loop is working - it is
        user_pw_hash = hash_pw(user_pw)
    if( user_pw_hash == correct_pw_hash ):
        print("Welcome back... your flag, user:")
        decryption = str_xor(flag_enc.decode(), user_pw)
        print(decryption)
        return
    print("That password is incorrect")

level_4_pw_check()

# The strings below are 100 possibilities for the correct password.
#   (Only 1 is correct)
pos_pw_list = ["6288", "6152", "4c7a", "b722", "9a6e", "6717", "4389", "1a28", "37ac", "de4f", "eb28", "351b", "3d58", "948b", "231b", "973a", "a087", "384a", "6d3c", "9065", "725c", "fd60", "4d4f", "6a60", "7213", "93e6", "8c54", "537d", "a1da", "c718", "9de8", "ebe3", "f1c5", "a0bf", "ccab", "4938", "8f97", "3327", "8029", "41f2", "a04f", "c7f9", "b453", "90a5", "25dc", "26b0", "cb42", "de89", "2451", "1dd3", "7f2c", "8919", "f3a9", "b88f", "eaa8", "776a", "6236", "98f5", "492b", "507d", "18e8", "cfb5", "76fd", "6017", "30de", "bbae", "354e", "4013", "3153", "e9cc", "cba9", "25ea", "c06c", "a166", "faf1", "2264", "2179", "cf30", "4b47", "3446", "b213", "88a3", "6253", "db88", "c38c", "a48c", "3e4f", "7208", "9dcb", "fc77", "e2cf", "8552", "f6f8", "7079", "42ef", "391e", "8a6d", "2154", "d964", "49ec"]
</code>```

答:
SO I stumbled upon the answer.... it appears to be a indent error (sorry, I don't fully grasp python). But once I properly indented my modified code I got the answer!</p>
```<code>def level_4_pw_check():
    for x in pos_pw_list: # for loop to iterate through the pos_pw_list
        user_pw = x
        user_pw_hash = hash_pw(user_pw)
        print(user_pw) # printing user_pw just to make sure the loop is working - it is

        if( user_pw_hash == correct_pw_hash ):
            print("Welcome back... your flag, user:")
            decryption = str_xor(flag_enc.decode(), user_pw)
            #decryption = xor(flag_enc.decode(), user_pw)
            print(decryption)
            return
        print("That password is incorrect")
</code>```

Title: PicoCTF General Skills PW Crack Level4

Body:
I'm working on the PW Crack Level4 in the PicoCTF General Skills section. I'm very new to python and CTF's in general. The challenge is to find the right pw from the included list of 100 possibles. I could have, by now, simply entered each one, lol, but that's not the point I think. So I am trying to modify the code to iterate through the list of pw's and pass each one to the part of the code that checks it.

That's where I'm stuck. The for loop seems to run through the list without passing each pw to the part of the code that should check it... I feel like the answer is on the tip of my tongue. But I'm too new to see it.

Here's my code

import hashlib

### THIS FUNCTION WILL NOT HELP YOU FIND THE FLAG --LT ########################
def str_xor(secret, key):
    #extend key to secret length
    new_key = key
    i = 0
    while len(new_key) < len(secret):
        new_key = new_key + key[i]
        i = (i + 1) % len(key)
    return "".join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)])
###############################################################################

flag_enc = open('level4.flag.txt.enc', 'rb').read()
correct_pw_hash = open('level4.hash.bin', 'rb').read()

def hash_pw(pw_str):
    pw_bytes = bytearray()
    pw_bytes.extend(pw_str.encode())
    m = hashlib.md5()
    m.update(pw_bytes)
    return m.digest()

pos_pw_list = ["6288", "6152", "4c7a", "b722", "9a6e", "6717", "4389", "1a28", "37ac", "de4f", "eb28", "351b", "3d58", "948b", "231b", "973a", "a087", "384a", "6d3c", "9065", "725c", "fd60", "4d4f", "6a60", "7213", "93e6", "8c54", "537d", "a1da", "c718", "9de8", "ebe3", "f1c5", "a0bf", "ccab", "4938", "8f97", "3327", "8029", "41f2", "a04f", "c7f9", "b453", "90a5", "25dc", "26b0", "cb42", "de89", "2451", "1dd3", "7f2c", "8919", "f3a9", "b88f", "eaa8", "776a", "6236", "98f5", "492b", "507d", "18e8", "cfb5", "76fd", "6017", "30de", "bbae", "354e", "4013", "3153", "e9cc", "cba9", "25ea", "c06c", "a166", "faf1", "2264", "2179", "cf30", "4b47", "3446", "b213", "88a3", "6253", "db88", "c38c", "a48c", "3e4f", "7208", "9dcb", "fc77", "e2cf", "8552", "f6f8", "7079", "42ef", "391e", "8a6d", "2154", "d964", "49ec"]

def level_4_pw_check():
    for x in pos_pw_list: # for loop to iterate through the pos_pw_list
        user_pw = input(x)
        # print(user_pw) # printing user_pw just to make sure the loop is working - it is
        user_pw_hash = hash_pw(user_pw)
    if( user_pw_hash == correct_pw_hash ):
        print("Welcome back... your flag, user:")
        decryption = str_xor(flag_enc.decode(), user_pw)
        print(decryption)
        return
    print("That password is incorrect")

level_4_pw_check()

# The strings below are 100 possibilities for the correct password.
#   (Only 1 is correct)
pos_pw_list = ["6288", "6152", "4c7a", "b722", "9a6e", "6717", "4389", "1a28", "37ac", "de4f", "eb28", "351b", "3d58", "948b", "231b", "973a", "a087", "384a", "6d3c", "9065", "725c", "fd60", "4d4f", "6a60", "7213", "93e6", "8c54", "537d", "a1da", "c718", "9de8", "ebe3", "f1c5", "a0bf", "ccab", "4938", "8f97", "3327", "8029", "41f2", "a04f", "c7f9", "b453", "90a5", "25dc", "26b0", "cb42", "de89", "2451", "1dd3", "7f2c", "8919", "f3a9", "b88f", "eaa8", "776a", "6236", "98f5", "492b", "507d", "18e8", "cfb5", "76fd", "6017", "30de", "bbae", "354e", "4013", "3153", "e9cc", "cba9", "25ea", "c06c", "a166", "faf1", "2264", "2179", "cf30", "4b47", "3446", "b213", "88a3", "6253", "db88", "c38c", "a48c", "3e4f", "7208", "9dcb", "fc77", "e2cf", "8552", "f6f8", "7079", "42ef", "391e", "8a6d", "2154", "d964", "49ec"]

Body:
SO I stumbled upon the answer.... it appears to be a indent error (sorry, I don't fully grasp python). But once I properly indented my modified code I got the answer!

def level_4_pw_check():
    for x in pos_pw_list: # for loop to iterate through the pos_pw_list
        user_pw = x
        user_pw_hash = hash_pw(user_pw)
        print(user_pw) # printing user_pw just to make sure the loop is working - it is

        if( user_pw_hash == correct_pw_hash ):
            print("Welcome back... your flag, user:")
            decryption = str_xor(flag_enc.decode(), user_pw)
            #decryption = xor(flag_enc.decode(), user_pw)
            print(decryption)
            return
        print("That password is incorrect")