php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 6 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 30-11-2009, 12:38
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard sqlsrv_num_rows geht nicht

Hi!

Ich arbeite mit einem MSSQL Server (Treiber V1.1), PHP5 und Stored Procedures. Funzt auch soweit alles gut, aber der Befehl sqlsrv_num_rows gibt immer folgenden Fehler aus:

LoginWarning: sqlsrv_num_rows() expects parameter 1 to be resource, boolean given in C:\Programme\Apache Software Foundation\Apache2.2\htdocs\index.php on line 49

Code ist folgender:

PHP-Code:
 $SQLParams2 = array(array($_SESSION['userid'], SQLSRV_PARAM_INSQLSRV_PHPTYPE_INTSQLSRV_SQLTYPE_INT));
    
$SQLOptions = array("Scrollable" => SQLSRV_CURSOR_STATIC);
    
$SQLResult sqlsrv_query($SQLVerbindung'EXEC dbo.getUserDetailMissingFields @BenutzerID=?'$SQLParams2$SQLOptions);
    
$row_count sqlsrv_num_rows($SQLResult); 
Wenn ich statt eine Stored Procedure aufrufe, den SQL-Befehl verwende, klappt es wunderbar. Hat jemand eine Idee, wie ich die Anzahl der betroffenen Zelen zurückbekomme? Die Dokumentation von mdsn gibt auch nicht wirklich viel her. Danke schonmal.
mfg streuner
Page loading ... Please wait
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
  #2 (permalink)  
Alt 30-11-2009, 13:25
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

SQL Statements unterteilen sich in Abfragen (query) und Anweisungen (execute). Eine Stored Procedure fällt in die zweite Kategorie und bietet daher über ..._rows_affected den Zugriff auf die Anzahl der betroffenen (modifizierten) Datensätze an, während ..._num_rows die Anzahl der gelieferten Datensätze aus einer Abfrage zurückgibt. Auf jeden Fall solltest du execute() statt query() verwenden.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (30-11-2009 um 13:29 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 30-11-2009, 14:14
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ah...ok. Ist ein guter Ansatz. Werde ich gleich mal testen und bei Problemen ggf. nochmal posten!

Danke Dir.

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
  #4 (permalink)  
Alt 30-11-2009, 15:10
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Geht leider auch nicht! Wenn ich folgendes eingebe:

PHP-Code:
    $SQLParams2 = array(array($_SESSION['userid'], SQLSRV_PARAM_INSQLSRV_PHPTYPE_INTSQLSRV_SQLTYPE_INT));
    
$SQLResult sqlsrv_execute($SQLVerbindung'EXEC dbo.getUserDetailMissingFields @BenutzerID=?'$SQLParams2); //, $SQLOptions);
    
$SQLRows sqlsrv_rows_affected($SQLResult); 
Fehler:

LoginFatal error: Called no parameter function with parameters. in C:\Programme\Apache Software Foundation\Apache2.2\htdocs\index.php on line 48


Wenn ich das nach der Doku mache (msdn) und zuerstden Query (oder jetzt execute Aufruf) mit prepare binde und dann eine execute + sqlsrvrows_affected mache, habe ich den Bildschirm voll mit Fehlermeldungen! Macht auch keinen Unterschied, wenn ich die Stored Procedure innerhalb meines Aufrufs statt mit "EXEC" mit "CALL" Aufrufe.

Es wundert mich einfach, dass der Befehl nicht funktioniert, wenn ich eine Stored Procedure in der MSSQL Datenbank aufrufe! Wenn ich das SQL Statement aber manuelle ausführe (in meinem Code) geht das ohne Probleme. Er scheint ein Zeiger Problem zu haben, was ich im ersten Code so versucht habe zu umgehen:

PHP-Code:
$SQLOptions = array("Scrollable" => SQLSRV_CURSOR_STATIC); 
Version 1.1 of the SQL Server Driver for PHP introduces the following features:
...
The sqlsrv_num_rows function has been added, which returns the number of rows in a result set.
...

laut Dokumentation müsste der Befehl ja gehen!

Vermutlich muss ich dann einfach mit nem Count(*) Befehl alles zählen, ist aber nicht wirklich elegant.

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
  #5 (permalink)  
Alt 01-12-2009, 09:40
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Kannst du bitte die fehlerverursachende Zeile 48 im Code kenntlich machen? Momentan weiß ich gar nicht, welche Funktion er meint.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #6 (permalink)  
Alt 01-12-2009, 09:51
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Und mir ist diese Fehlermeldung auch noch nie begegnet. Aus PHP kommt diese also offensichtlich nicht (da man durchaus Funktionen und Methoden mit mehr Parametern als in der Signatur angegeben aufrufen kann). Und Google findet auch nur diesen Thread …
Mit Zitat antworten
  #7 (permalink)  
Alt 01-12-2009, 09:57
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von unset Beitrag anzeigen
Aus PHP kommt diese also offensichtlich nicht (da man durchaus Funktionen und Methoden mit mehr Parametern als in der Signatur angegeben aufrufen kann).
Normalerweise ja, aber da diese PHP-Extension von Microsoft ist, kann man nicht wissen, ob die sich an die PHP-Standards gehalten haben.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #8 (permalink)  
Alt 01-12-2009, 10:04
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Ok, also was ich vorher über query und execute gesagt hatte, trifft in diesem Fall (für diesen Treiber) nicht zu. Offenbar kann man mit sqlsrv_query auch Update-Statements absetzen und Stored Procedures aufrufen, also solltest du wieder sqlsrv_query verwenden.

Dass das Ergebnis von sqlsrv_query am Anfang false war, lag also nicht am PHP-Code sondern viel eher daran, dass der Aufruf der Stored Procedure selbst scheitert:

Zitat:
Zitat von http://msdn.microsoft.com/en-us/library/cc296184%28SQL.90%29.aspx
Return Value
A statement resource. If the statement cannot be created and/or executed, false is returned.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 01-12-2009, 10:31
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi!

Die angegebene Zeile ist folgende:

PHP-Code:
$SQLRows sqlsrv_rows_affected($SQLResult); 
Ich bin das Problem jetzt "umgangen" mit sqlsrv_has_rows, geht auch,
aber dennoch wundert mich, dass so ein "normaler" Befehl, wie sqlsrv_num_rows solche Probleme macht.

@AmicaNoctis: Du meinst also, dass der Aufruf allgemein gescheitert ist?

Wenn ich statt dem Stored Procedure Aufruf, aber ein entsprechendes SQL-Statement
reinpacke, klappt es ja. Die Rückgabe der Stored Procedure an sich funktioniert ja auch, lediglich
der Zugriff mit num_rows nicht.

In der mdsn Doku gibt es Beispiele mit Stored Procedures zur Laufzeit und num_rows. Das scheint soweit
auch zu Funktionieren komischerweise!

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mailversand geht und geht wieder nicht Master0Blicker PHP Developer Forum 6 04-07-2007 21:01
hidden feld per dropdown setzen (FF geht, IE geht nicht) Schlafmütze HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 5 01-06-2006 13:49
Geister im Script? Firefox geht, Inet Explorer geht nicht derEini Tutorials 32 17-02-2006 11:20
Warum geht das nicht ? - fast identischer SQL Befehl geht .. syco23 SQL / Datenbanken 10 10-07-2003 19:54
es geht und geht doch nicht whoda SQL / Datenbanken 3 14-02-2003 18:52

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:49 Uhr.